java虚拟机的基本结构

JVM启动流程

这里写图片描述
其中jvm.cfg是jvm的配置文件

JVM基本结构

这里写图片描述

PC寄存器

每个线程拥有一个PC寄存器,在线程创建时创建,指向下一条指令的地址。如果是执行本地方法时,PC的值为undefined。

想一下为什么jvm虚拟机只有一个寄存器——PC寄存器?

因为JVM是软件虚拟,无法使用寄存器的硬件优势,所以JVM本就不存在真正意义上的寄存器。

内存空间

方法区

保存装载的类信息(类的元信息)

  1. 类型的常量池
  2. 字段,方法信息
  3. 方法字节码

通常和永久区(Perm)关联在一起
这里可以注意一个细节对于String的常量,在jdk7的时候由原来不存在方法区的常量池中修改为保存在堆中常量池。

java堆

java堆是线程共有的区域,应用系统对象保存在java堆

java栈

java栈是线程私有的,主要保存的单元是栈帧,栈帧由局部变量表,操作数栈,帧数据区组成。
局部变量表包含——局部变量以及函数参数
操作数栈包含——计算过程中的中间结果
帧数据区——保存访问常量池的指针,已经对异常处理的时候需要的异常处理表也在帧数据区。

栈上分配

栈上分配指java虚拟机提供的一项优化技术,它的基本思想是:对于哪些线程私有的对象(不可能被其他线程访问),可以将它们打散分配在栈上,而不是分配在堆上。这样的好处是不需要GC的介入,当函数返回的时候自动销毁栈上的数据。
栈上分配的基础是进行逃逸分析,这里举个例子:
这里写图片描述
对于第二个函数的user虚拟机进行有化的化,就会在栈上分配。

栈、堆、方法区交互

举个例子:
这里写图片描述
这里写图片描述

JVM内存模型

参考:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值