概述
在java虚拟机中,程序计数寄存器的命名源于cpu的寄存器,cpu只有把数据装载到寄存器才能够运行,
Java虚拟机中的pc寄存器并不是物理层面上的寄存器,而是一种抽象模拟
pc寄存器在jvm的位置:
作用
每个线程都有属于自己的程序计数器,和线程的生命周期一致,程序在执行时的各种功能都要依靠这个pc寄存器,字节码解释器工作时就是通过改变这个计数器来选取下一条需要执行的字节码指令
需要注意的是:它是唯一一个在java虚拟机规范中没有规定OutOfMemoryError的区域
实例
通过一个简单的程序来说明pc寄存器的工作过程:
public class jclassTest {
public static void main(String[] args) {
int i = 9;
int j = 7;
int k = i + j;
}
}
我们通过jclasslib
插件反编译或者执行javap
命令来执行这段代码,前提是该代码必须编译过
在pc获取到指令地址2后,执行引擎会去读取pc寄存器中指令指向的语句,即:istore_1
,意思是保存局部变量表里索引为2的数据,我们进入局部变量表看看:
然后执行引擎在执行后就在操作数栈中进行对应指令的入栈,相加,出栈的操作了,并且转化为机器指令,让cpu进行相应的运算