当前位置:网站首页>JVM内存和垃圾回收-04.程序计数器(PC寄存器)
JVM内存和垃圾回收-04.程序计数器(PC寄存器)
2022-08-02 18:40:00 【J___code】
1.PC寄存器
- 存储指向下一条指令的地址,由执行引擎根据PC寄存器读取下一条指令。下图中一个栈帧相当于一个方法,假设当前栈帧的局部变量表地址为1,操作数栈为2,PC寄存器就是存储该地址:
- 它是很小的内存空间,也是运行速度最快的存储区域
- 因为每个线程都有自己的PC寄存器,所以它的生命周期和线程的一致
- 任何时间一个线程只能有一个方法在执行(即当前方法)。PC寄存器会存储当前方法的JVM指令地址;如果是执行本地方法,则为未指定值(因为PC寄存器是Java层面的寄存器)
- 它是程序控制流的指示器,比如循环、线程恢复等都依赖它
- 字节码解释器工作时通过改变它的值来选取下一条需要执行的字节码指令
tips:
- 寄存器存储指令相关的现场信息,CPU只有把数据装载到寄存器才能运行
- JVM的PC寄存器是对物理PC寄存器的抽象模拟
- PC寄存器是唯一在JVM中没有GC和OOM的(虚拟机栈或本地方法栈没有GC但有可能溢出,方法区和堆也可能溢出)
2.举例说明
- 假设Java程序代码如下:
public static void main(String[] args) { int i = 10; int j = 20; int k = i + j; } 将其进行反编译后:
3.常见问题
使用PC寄存器存储字节码指令地址的作用?
JVM字节码解释器需要通过改变PC寄存器的值明确下一条该执行什么字节码指令
为什么使用PC寄存器记录当前线程的执行地址?
因为CPU需要不停的切换线程,切换回来后需要知道从哪里继续执行
PC寄存器为什么被设定为线程私有?
因为CPU会不停在多个线程中做任务切换,为了能够准确记录各个线程正在执行的当前字节码指令地址,所以为每个线程分配一个PC寄存器,这样每个线程可以独立计算,避免线程间相互干扰的情况
边栏推荐
- Detailed explanation of AtomicInteger
- 【C语言刷题】Leetcode169——多数元素
- Functional test points for time, here is a comprehensive summary for you
- LeetCode 2333. 最小差值平方和(贪心)
- AtomicInteger详解
- Why young people are snapping up domestic iPhone, because it is much cheaper and more populist
- register和volatile的区别
- 元旦快乐(2022)
- CWE4.8:2022年危害最大的25种软件安全问题
- NIO基础之三大组件
猜你喜欢

下载mysql的源码包

Why young people are snapping up domestic iPhone, because it is much cheaper and more populist

Boyun Selected as Gartner China DevOps Representative Vendor

就刚刚,鸿蒙3.0发布了,华为还一口气发布了十一款产品

Detailed explanation of AtomicInteger

动态折线图,制作原来是这么简单

leetcode:622. 设计循环队列【循环队列板子】

【C语言刷题】牛客网刷题——替换空格

中国科学院院属研究单位

Enterprise cloud cost control, are you really doing it right?
随机推荐
洛谷P4799 世界冰球锦标赛
T31开发笔记:metaipc测试
Boyun Selected as Gartner China DevOps Representative Vendor
Endanger the safety of common Internet attacks have?
如何获取EasyCVR平台设备通道的RTMP视频流地址?
register和volatile的区别
From the technical panorama to the actual scene, analyze the evolutionary breakthrough of "narrowband high-definition"
[深入研究4G/5G/6G专题-49]: 5G Link Adaption链路自适应-5-上行链路自适应ULLA-PUSCH信道
1.0.0到1.0.2的底层数据库表的更新,需要再重新自建数据库吗?
【软考软件评测师】基于经验的测试技术
Interviewer: can you talk about optimistic locking and pessimistic locks
NIO基础之三大组件
selenium安装和环境配置Firefox
就刚刚,鸿蒙3.0发布了,华为还一口气发布了十一款产品
[论文分享] VideoFlow: A Flow-Based Generative Model for Video
千万级别的表分页查询非常慢,怎么办?
Enterprise cloud cost control, are you really doing it right?
回收站删除的文件怎么恢复,2个方法汇总助您快速解决
Win11dll文件缺失怎么修复?Win11系统dll文件丢失的解决方法
【C语言刷题】Leetcode238——除自身以外数组的乘积

