程序计数器(PC寄存器 Program Counter Register)
- pc寄存器并非广义上所指的物理寄存器,JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟
- 作用:PC寄存器用来存储指向下一条命令的地址,即 将要执行的命令代码,由执行引擎读取下一条指令.
- 它是一块很小的内存空间,几乎可以忽略不计,也是运行速度最快的存储区域.
- 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程生命周期保持一致
- 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法,程序计数器会存储线程正在执行的java方法的JVM指令地址,或者,如果是在执行native方法,则是未指定值(undefined)
- 它是程序控制流的指示器,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这计数器来完成
- 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令
- 它是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域
为什么要使用PC寄存器
- cpu来回切换不同的各个线程,当切换回来的时候,需要知道当前线程执行到哪了
- jvm的字节码解释器通过改变pc寄存器的值来明确下一条应该执行的字节码指令
PC寄存器为什么会被设定为线程私有
- 因为各个线程是交替执行的,整体是随机的,但是每个线程又是有序的,从上至下执行,如果共享同一个pc寄存器,那么整体执行顺序就确定了.