JVM框架结构
执行Main.class的顺序
-
先通过类装载系统把文件字节码装载到方法区
-
再通过字节码执行引擎执行相关代码
完整 JVM 构成的三个部分
- 类装载子系统
- 运行时数据区(内存模型)
- 字节码执行引擎
浅谈堆
大家学过jdk之后,估计都知道它存放的都是new出来的对象
,深一点就会知道伊甸园,幸存者区和老年代
,还有gc
等等
浅谈栈
栈又叫虚拟机栈或线程栈,当执行一个方法时,会开辟一块栈帧,里面主要存放一些局部变量
,操作数栈,动态连接,方法出口
,执行完方法后弹栈.
浅谈本地方法栈
底层有C语言实现,C语言是所有语言的前辈,为java虚拟机提供Native方法
虚拟机栈和本地方法栈的区别
本地方法栈与虚拟机栈的作用完全一样,在HotSpot虚拟机中,本地方法栈与虚拟机栈是同一块内存区域。
他俩的区别无非是:
- 本地方法栈为虚拟机使用的Native方法服务,
- 而虚拟机栈为JVM执行的Java方法服务。
浅谈程序计数器
- 计数器记录的是正在执行的虚拟机字节码指令的地址;
- 如果正在执行的是一个Native方法,这个计数器值为空
简单的说,就是看程序执行到第几行
浅谈方法区
它用于存储已被虚拟机加载的类信息、常量、静态变量
、即编译器编译后的代码等数据
浅谈常量池
运行时常量池是方法区的一部分,存放字面量与符号引用