JVM学习笔记四:程序计数器(PC寄存器)

四-程序计数器(PC寄存器) 4.1 PC Register介绍 JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟 PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码,有执行引擎读取下一条指令。 是一块很小的内存空间,运行速度最快的存储区域 在JVM中,每个线程都有自己的程序计数器,是线程私有的,生命周期和线程的生命周期保持一致 任何时间一个线程都只有一个方法在执行,也就是所有的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址;如果在执行native方法,则是undefined 是程序控制流 阅读详情

0. 前言

声明:
感谢尚硅谷宋红康老师的讲授。
感谢广大网友共享的笔记内容。
B站:https://www.bilibili.com/video/BV1PJ411n7xZ
本文的内容基本来源于宋老师的课件,其中有一些其他同学共享的内容,也有一些自己的理解内容。

目录

  1. PC Register 介绍
  2. 举例说明
  3. 两个常见问题
  4. 总结

1. PC Register 介绍

JVM 中的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。

它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。

在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。

任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的 Java 方法的 JVM 指令地址;或者,如果是在执行 native 方法,则是未指定值(undefined)。

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

字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。

它是唯一一个在 Java 虚拟机规范中没有规定任何 OutofMemoryError 情况的区域。并且也没有 GC 操作。

作用
PC寄存器用来存储指向下一条指令的地址——即将要执行的指令代码。由执行引擎读取下一条指令。
PC寄存器的作用介绍

2. 举例说明

有如下代码:
经过编译之后,使用 jclasslib 插件查看其字节码指令。

package com.hy;
public class PCRegisterTest {
    public static void main(String[] args) {
        int i = 10;
        int j = 20;
        int k = i + j;

        String str = "hello";
        System.out.println(i);
        System.out.println(j);
        System.out.println(str);
    }
}

字节码编译结果
操作指令的执行过程

3. 两个常见问题

问题1:使用PC寄存器存储字节码指令地址有什么用呢?为什么使用PC寄存器记录当前线程的执行地址呢?
因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行。

JVM 的字节码解释器就需要通过改变 PC 寄存器的值来明确下一条应该执行什么样的字节码指令。

问题2:PC寄存器为什么被设定为私有的?
我们都知道所谓的多线程在一个特定的时间段内只会执行其中某一个线程的方法,CPU会不停地做任务切换,这样必然导致经常中断或恢复,如何保证分毫无差呢?为了能够准确地记录各个线程正在执行的当前字节码指令地址,最好的办法自然是为每一个线程都分配一个PC寄存器,这样一来各个线程之间便可以进行独立计算,从而不会出现相互干扰的情况。

由于CPU时间片轮限制,众多线程在并发执行过程中,任何一个确定的时刻,一个处理器或者多核处理器中的一个内核,只会执行某个线程中的一条指令。

这样必然导致经常中断或恢复,如何保证分毫无差呢?每个线程在创建后,都会产生自己的程序计数器和栈帧,程序计数器在各个线程之间互不影响。

CPU时间片
CPU时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片。

在宏观上:俄们可以同时打开多个应用程序,每个程序并行不悖,同时运行。

但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

4. 总结

  1. 对程序计数器做了介绍,该区域存储程序执行的下一条指令的地址。且不会出现 OOM 和 GC 操作。
  2. 通过对字节码文件反编译,从反编译结果中了解到 PC 中存储的是啥。
  3. 解释了执行引擎执行操作指令的过程。
  4. 回答了关于 PC 寄存器的两个常见问题。
【JVM】PC程序计数器和PC寄存器 首先这里的PC寄存器并非广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也成为程序钩子),并且也不容易引起一些不必要的误会。JVM 中的PC寄存器是对物理寄存器的一种抽象模拟。 阅读详情

相关推荐

C# WPF多页面间的数据共享(经典)

实现页面间的数据共享有很多方法,比如:①事件的发布订阅 ②委托③ioc容器④静态类等,这节主要通过静态的集合实现数据的添加和获取。

sf315418的博客 638

JVM(三) —— 运行时数据区之程序计数器(PC寄存器)

JVM中的程序计数器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能运行

壹升茉莉清的博客 1064

普源精电DHO系列示波器选购指南:从学生党到工程师的完整对比

本文深入评测普源精电DHO系列示波器,从DHO800到DHO4000各型号的核心参数、功能特点及适用场景进行全面对比,帮助学生党和工程师根据实际需求选择最佳型号。重点分析带宽、采样率、存储深度等关键指标,并提供实用的选购建议和进阶使用技巧,帮助用户充分发挥示波器性能。

weixin_30485379的博客 167

JVM 程序计数器

程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。- - 摘自《深入理解Java虚拟机》 特 点 如果线程正在执行的是Java 方法,则这个计数器记录的是正在执行的虚拟机字节码指令地址 如果正在

leaf_0303的博客 1万+

行为验证码 AJ-Captcha 使用文档

AJ-Captcha验证码系统集成指南:需添加captcha-spring-boot-starter和Redis依赖,配置Redis连接。核心实现包括Redis缓存服务类CaptchaCacheRedisImpl(含设置、查询、删除验证码等方法)、SPI配置文件及Spring Boot配置类(配置验证码属性和Redis模板)。系统支持验证码生成、校验、防刷等安全功能,适用于Web应用安全验证场景。

千层冷面的博客 2110

电价预测的Transformer实战:从注意力机制到超长序列建模

本文深入探讨了Transformer模型在电价预测领域的实战应用,对比了其与LSTM在处理长序列依赖和误差累积问题上的优劣。文章详细解析了自注意力机制的原理,并提供了处理超长序列的位置编码方法、构建专用预测模型的完整PyTorch代码,以及防止信息泄露的关键技巧。通过实战对比,展示了Transformer在并行计算、长距离建模和预测精度上的显著优势,并分享了应对极端波动和提升模型效率的高级优化策略。

f6g7h8i9j的博客 540

JVM学习笔记——程序计数器

设计目的在java的字节码解析器当中,需要辨别当前的字节码解析到了哪个地方,同时需要来控制程序的流程,如果在程序当中没有一个东西来记录当前程序执行到哪个,同时下一步应该执行哪一步操作例如:分支、循环、跳转、异常处理等操作都不是按照原本程序书写的顺序来执行的,所以为了能够引导程序的运行,就需要引进一个用来引导字节码解析顺序的东西,就叫做程序计数器。设计模型并没有多少资料记录了程序计数器的设计原理,但是

HanyChild的博客 5534

Wi-Fi物理帧间隔概念简介

物理帧间隔概念简介。

1042484520@qq.com(邮箱) 1778

JVM之PC寄存器

JVM之PC寄存器 目录: JVM体系结构概览 JVM之PC寄存器 JVM体系结构概览 2. JVM之PC寄存器 PC寄存器( PC register ):每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器。PC寄存器里保存有当前正在执行的JVM指令的地址。 每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。保存下一条将要执行的指令...

努力努力再努力L 1万+

【光伏风电功率预测】基于 ICEEMDAN + MSCNN-BiGRU-Attention 的并行预测模型

本文提出一种基于ICEEMDAN分解与多尺度深度学习的光伏/风电功率并行预测框架。针对多能源、多时间尺度、强非平稳特性带来的建模挑战,该模型首先通过改进的ICEEMDAN算法将原始功率序列分解为不同频段的IMF分量;随后为每个IMF构建包含多尺度CNN、双向GRU和注意力机制的子模型,实现局部特征提取与时序依赖建模;最后通过并行预测与重构获得最终功率输出。实验表明,该方法能有效解决模式混叠问题,提升预测精度,并支持光伏/风电的独立或联合预测部署,适用于风光联合调度等工程场景。

专注AI大模型,软件混淆,授权 154

C#开发的OpenRA游戏之网络接收后找到游戏对象

而这个队列是在创建这个游戏对象时组件,因为一个游戏对象有很多特性,当发现创建游戏对象时有IResolveOrder继承接口的对象,就添加到这个数组。在这里先检查一下命令是否有效的,接着就调用命令的执行对象,即是游戏对象来执行这个命令了。order.Subject就是上面解释游戏对象ID,并从游戏世界里找到的游戏对象,再从各个字段里找到对应的信息,再把这个动作交给游戏世界里的对象执行。从前面分析可知,要找到游戏世界里的对象,就需要游戏对象的ID,因此, 我们来分析游戏对象的ResolveOrder函数。

大坡3D软件开发 1034

JVM 学习笔记四、程序计数器(PC寄存器)

四、程序计数器(PC寄存器) 特点: 运行时数据区中唯一不会出现OOM的区域,没有垃圾回收。 每个线程有一个私有的程序计数器,线程之间互不影响。 程序计数器会存储当前线程正在执行的Java方法的 JVM指令地址,为了线程切换后能恢复到正确的位置。 如果正在执行的本地方法,这个计数器值则应为空。(undefined) (面试常问)使用PC寄存器存储字节码指令地址有什么用? (面试常问)为什么使用PC寄存器记录当前线程的执行地址呢? 记录下一条字节码执行的指令,实现分支循环跳转、异常处理、线程恢复等功.

小宇哥x的博客 239

Android 13.0 framework默认沉浸式导航栏功能实现

​ 在13.0的系统rom定制化开发中,在实现导航栏的某些定制化开发中,在某些产品需要实现沉浸式导航栏,就是需要app 能全屏显示同样也能显示导航栏,接下来就来分析下相关的功能实现 ​

安卓兼职framework和app工程师的博客 467

JVM学习笔记(四):程序计数器(PC寄存器)Program Counter Register

一、

Lemon 701

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JVM学习笔记四--程序计数器(PC寄存器)

文章目录一、PC Register介绍二、举例说明三、两个常见问题 一、PC Register介绍 二、举例说明 三、两个常见问题

weixin_45787495的博客 175

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

第四章 程序计数器(PC寄存器)

它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。在 JVM 规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的 Java 方法的 JVM 指令地址;或者,如果是在执行 native 方法(本地方法,C/C++),则是未指定值(undefined)。它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

dingd1234的博客 3030

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JVM程序计数器(PC寄存器)

JVM程序计数器(PC寄存器) pc Register介绍 JVM中的程序计数寄存器(Program counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其翻译为Pc计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的Pc寄存器是对物理PC寄存器的一种抽象模拟。 作用: PC寄存器用来存储指向下一条指令的地址,也即将

水巷石子的博客 3893

PC寄存器/程序计数器(Program Counter Register)

目录 目录 目录 1.什么是pc寄存器? 2.pc寄存器的作用以及详解? 3.面试问题? 4.涉及相关知识补充

被流放的程序猿 3235

4. JVM-程序计数器(PC寄存器)

JVM-程序计数器(PC寄存器) 1. PC Register介绍 2. 举例说明 3. 两个常见问题 3.1 使用PC寄存器存储字节码指令地址有什么用呢? 3.2 PC寄存器为什么被设定为私有的? 4. CPU时间片

Android系统优化 3161

程序计数器(pc寄存器)

程序计数器(pc寄存器): pc寄存器 每个线程有一份 作用:PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。 pc寄存器它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序...

stone的博客 5705

JVM第四篇 程序计数器(PC寄存器)

PC Register介绍JVM中的程序计数器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把...

盲目的拾荒者的博客 1713

Java --- JVM程序计数器(PC寄存器)

JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到奇存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为pc计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的ec寄存器是对物理PC寄存器的一种抽象模拟。

qq_46093575的博客 2484

JVM笔记十:pc寄存器

详细介绍了JVM中的程序计数寄存器(Program Counter Register)

munangs的博客 3484

第四章程序计数器(PC寄存器)

JVM中的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。图2 PC寄存器工作图作用:PC寄存器用来存储向下一条指令的地址,也就是即将要执行的指令。由执行引擎读取下一条指令。

weixin_49429082的博客 1269

程序计数器(PC寄存器)

程序计数器(PC寄存器)PC RegisterPC寄存器使用举例常见面试问题CPU时间片 PC Register JVM中的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。 P

z318913的博客 4110
上一篇: JVM学习笔记三:运行时数据区概述及线程
下一篇: JVM学习笔记五:虚拟机栈(VMS)
种花途。
博客等级 码龄10年 3粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值