JVM 整理
JVM 结构
图片来源:https://blog.****.net/weixin_40516788/article/details/89293548
方法区和堆是线程共享的。
程序计数器、虚拟机栈是线程私有的。
一个线程可能被中断,下次再被调度起来的时候,才知道指令执行到什么位置了,需要在程序计数器中保存中断的位置。程序计数器是线程私有保存执行的指令位置,虚拟机栈
程序计数器
线程中断时候保存当前执行的指令,以便下次恢复。
虚拟机栈
虚拟机栈包含局部变量表、操作数栈、动态链接、出口等等
以下面代码为例,右边是反编译的字节码文件。
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:相加;