JVM--程序计数器
JVM–程序计数器
背景
-
JVM–程序计数器
-
博主以黑马JVM进行学习
定义
- 程序计数器(Program Counter Register)是 JVM 运行时数据区中唯一一个不会抛出 OutOfMemoryError 的区域,它是一块很小的内存空间,可以理解为 JVM 层面的 “指令指针”。(
OutOfMemoryError是 JVM 抛出的一种严重错误(Error),而非普通异常(Exception),它表示:JVM 已经没有足够的内存空间来满足新的内存分配请求,且垃圾回收器(GC)也无法回收出足够的可用内存。) - 它的核心定位是:每个线程都有自己独立的程序计数器(线程私有),专门用来记录当前线程正在执行的 JVM 字节码指令的地址(也可以是行号),如果执行的是本地方法(native 方法),程序计数器的值则为 undefined(未定义)。
作用
-
程序计数器:记住下一条jvm指令的执行地址
-
第一次执行:二进制字节码(jvm指令)—>解释器—>机器码—>CPU,同时,程序计数器会记录下一条要执行的字节码指令的地址。
-
第二次执行:程序计数器<—解释器—>机器码—>CPU,同时,程序计数器再更新为新的 “下一条指令地址”。
-
在物理上程序计数器是通过寄存器来实现的:寄存器是 CPU 内部速度最快的存储单元,程序计数器直接映射到 CPU 的寄存器(或使用寄存器模拟),这也是它执行效率极高、内存占用极小的原因。
特点
- 是线程私有,每个线程都有自己的程序计数器
- 不会存在内存溢出