PC寄存器(程序计数器)
- 以Register命名,原自CPU的寄存器,是对物理寄存器的抽象模拟,寄存器存储指令相关的现场信息。
- PC寄存器用来指向下一行需要执行的指令,由执行引擎读取下一条指令。
- 任何线程在当前时间只有一个方法在执行,就是当前方法,PC寄存器会存储当前线程正在执行的方法的JVM指令地址。但是如果是正在执行native方法,则是未指定的值undefined。
- 他是程序控制流的指示器,分支,循环,跳转,异常,线程恢复等基础功能都需要依赖他,
- 字节码解释工作时,就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。
- JVM中唯一一个没有溢出的区域。
两个常见问题:
使用PC寄存器存储字节码指令地址有什么用?
为什么使用PC寄存器当前线程的执行地址?
- 因为CPU需要不停的切换各个线程,切换回来,我得知道从哪开始继续执行,所以需要PC寄存器来记录。
- JVM的解释器就是改变PC寄存器的值来明确下一条该执行哪一条字节码指令。
- 其实java线程是映射到本地线程的,本地如何切换,java是交给操作系统的(线程的切换按道理就应该交给操作系统,线程之前如何切换,java并不管,他是C语言基础上的)。这样实现起来就很方便,JVM只需要为每个线程都配置一个PC寄存器的。