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,如此推进。

相关推荐
小小小小关同学26 分钟前
【JVM】垃圾收集器详解
java·jvm·算法
日月星宿~34 分钟前
【JVM】调优
java·开发语言·jvm
wclass-zhengge2 小时前
03垃圾回收篇(D3_垃圾收集器的选择及相关参数)
java·jvm
翻晒时光5 小时前
Java 多线程与并发:春招面试核心知识
java·jvm·面试
秋夫人17 小时前
jvm G1 垃圾收集日志分析示例(GC)
jvm
天天向上杰17 小时前
简识JVM的栈帧优化共享技术
java·jvm
讓丄帝愛伱20 小时前
不重启JVM,替换掉已经加载的类
jvm
qq_3127384520 小时前
jvm学习总结
jvm·学习
天天向上杰20 小时前
简识JVM栈中的程序计数器
jvm
大乔乔布斯20 小时前
JRE、JVM 和 JDK 的区别
java·开发语言·jvm