JVM的工作流程
以下是JVM的工作流程:
运行时数据区域
1.程序计数器
通过改变这个计数器的值(行号)来选取下一条需要执行的字节码指令,程序计数器是线程私有的。
如果执行的是Native方法,计数器的值为Undefined。
2.虚拟机栈
虚拟机栈也是线程私有的,每一个方法从调用到执行完的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
虚拟机栈中包含局部变量表、对象的reference
3.本地方法栈
和虚拟机栈类似,只不过本地方法栈是为执行Native方法服务。
4.Java堆
所有线程共享的一块内存区域,用于存放实例对象,也是垃圾回收机制主要管理的区域,堆中包括新生代和老年代。
5.方法区
有点类似于永久代
垃圾收集算法
新生代采用了“复制”算法,一个大的Eden空间(80%)和两个小的Survivor空间(10%)。
老年代采用了“标记-整理”算法。