JVM运行时数据区 - 程序计数器

运行时数据区

Java虚拟机在执行Java程序的过程中,会把它管理的内存划分成若干个不同的区域,这些区域有各自的用途、创建及销毁时间,有些区域随着虚拟机的启动一直存在,有些区域则随着用户线程的启动和结束而建立和销毁,这些共同组成了Java虚拟机的运行时数据区域。

如上图,运行时数据区由方法区、堆区、Java虚拟机栈、本地方法栈、程序计数器五部分组成,其中方法区和堆区是线程共享的区域,Java虚拟机栈、本地方法栈和程序计数器是线程私有的区域,所以后三种的生命周期随着线程消亡而结束,前两种伴随虚拟机的启动一直存在。

程序计数器

程序计数器(也称PC寄存器)是线程私有地一块很小的内存区域,几乎忽略不计,同时也是运行速度最快的存储区域,存储了要执行的下一条指令的地址。

作用:

1、保证CPU的处理器切换线程执行时,等待的线程恢复执行之后能回到正确的位置继续执行(CPU的处理器在任一时间只能执行一个线程的指令,并且会不断切换线程执行)。

2、程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖程序计数器完成。

特性:

1、唯一一个在Java虛拟机规范中没有规定任何OutotMemoryError情况的区域

2、对于Java方法,则会存储线程要执行的当前Java方法JVM的指令地址,对于native方法,则未指定值(undefined)。

如图,Java方法编译之后会生成JVM字节码指令,字节码指令并不能被CPU直接执行,需要通过字节码执行引擎解释成机器码执行,字节码执行引擎通过程序计数器中存储指令地址,找到对应的字节码指令,如果执行引擎中正在执行0对应的指令,程序计数器中则记录的下一条指令的地址就是3,紧接着就是4,5,6,如此推进。

相关推荐
Derek_Smart3 天前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
大道至简Edward3 天前
深入 JVM 核心:一文读懂 Class 文件结构(附 Hex 实战解析)
jvm
weisian1517 天前
JVM--20-面试题6:如何判断对象可以被垃圾回收?
jvm·可达性算法
蚊子码农7 天前
每日一题--JVM线程分析与死锁排查
jvm
xuxie997 天前
NEXT 1 进程2
java·开发语言·jvm
weisian1517 天前
JVM--19-面试题5:说说JVM的类加载机制和双亲委派模型
jvm·双亲委派模型·jvm类加载机制
亓才孓7 天前
【反射机制】
java·javascript·jvm
Volunteer Technology7 天前
JVM之性能优化
jvm·python·性能优化
Andy Dennis7 天前
Java语法注意事项
java·开发语言·jvm
坚持的小马7 天前
JVM相关笔记-jps
jvm·笔记