JVM 整理

JVM 结构

JVM 整理
图片来源:https://blog.****.net/weixin_40516788/article/details/89293548

方法区和堆是线程共享的。

程序计数器、虚拟机栈是线程私有的。
一个线程可能被中断,下次再被调度起来的时候,才知道指令执行到什么位置了,需要在程序计数器中保存中断的位置。程序计数器是线程私有保存执行的指令位置,虚拟机栈

程序计数器

线程中断时候保存当前执行的指令,以便下次恢复。

虚拟机栈

虚拟机栈包含局部变量表操作数栈动态链接出口等等
以下面代码为例,右边是反编译的字节码文件。
JVM 整理
int j=0:
指定0:将常量0压如操作数栈
指令1:将操作数栈顶数据存到局部变量表index为2的位置。
局部变量表 index为1的位置是入参i的值;index为0是对象的this地址,如果是static方法,则 index 为0的位置为空

int sum = i + j:
指令2:将局部变量表index 1位置上的数据压栈(i);
指令3:将局部变量表index 2位置上的数据压栈(j);
指令4:相加;

JVM 整理