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

相关推荐
天选之子1235 小时前
DuckDB学习
jvm·学习
春卷同学10 小时前
032-关系型数据库在记账应用中的建模与查询优化
java·jvm·数据库
orient1 天前
JVM 调优实战:从监控告警到参数配置,一套完整方法论
jvm
orient1 天前
大白话 JVM:对象到底存在哪?GC 又是怎么运行的?
jvm
炸薯条!1 天前
从零开始学C++ (内存管理)
java·jvm·c++
凤山老林2 天前
从“无法创建本地线程“异常说起:深度解析线程栈与JVM线程优化指南
java·开发语言·jvm
csdn2015_2 天前
JVM 常用命令
jvm
fīɡЙtīиɡ ℡3 天前
JVM从入门到精通
jvm
wear工程师3 天前
volatile 这题别只答「可见性」:面试官真正想听的是这条 happens-before
java·jvm
sycmancia3 天前
Qt——多线程中的信号与槽(二)
jvm·qt