JVM:程序计数器
在 JVM 里,程序计数器(Program Counter Register,PC 寄存器)是一个很小的内存空间,用来存放当前线程所执行的字节码的行号指示器。
可以理解为:
-
它记录了当前线程下一条将要执行的字节码指令的地址。
-
执行引擎在运行时,就是依靠程序计数器来“知道下一步该去哪条指令”。
主要作用
-
控制字节码执行流程
-
JVM 通过改变程序计数器的值,来实现分支、循环、跳转、异常处理、线程恢复等功能。
-
-
线程切换时的恢复
-
JVM 是多线程的,每个线程在执行时都会有自己的程序计数器(是线程私有的)。
-
当发生线程切换时,程序计数器能保存当前线程执行到哪一条字节码,等线程切回来的时候,可以从中断的位置继续执行。
-
特点
-
线程私有:每个线程都有自己独立的 PC 寄存器,互不影响。
-
唯一不会 OOM 的内存区域:Java 虚拟机规范里,PC 寄存器是唯一一个没有规定任何 OOM 情况的区域,因为它只保存一个小小的行号值。
-
执行 Native 方法时:程序计数器值是 undefined,因为此时不再执行字节码。