JVM-第四章:程序计数器

JVM刨根问底之程序计数器 祝大家每日进步,有技术问题多多交流,同时欢迎大家关注我的头条号:IT人孙会良 工作之余,总结一下JVM相关知识,同时欢迎大家关注我,共同探讨技术和前沿应用。 Java虚拟机在执行java程序的过程中将其管理的内存分为不同的区域,有些区域随虚拟机进程的启动而存在,有些区域则依赖于用户进程的启动和结束来建立和销毁。java虚拟机管理的内存包括如下几个区域: 1.什么是程序计数器? 程............... 阅读详情

PC Register

介绍

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

官网:oracle官网->download->java->jdk->specifications
在这里插入图片描述

  • 它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。
  • 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。
  • 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址;或者,如果是在执行native方法,则是未指定值(undefned)。
  • 它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。
  • 它是唯一一个在Java虚拟机规范中没有规定任何outotMemoryError情况的区域。

作用

PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。
在这里插入图片描述

举例说明

/**
 * @author xq
 * @create 2021-05-02-14:36
 */
public class PCRegisterTest {
    public static void main(String[] args) {
        int i = 10;
        int j = 20;
        int k = i + j;
        String s = "abc";
        System.out.println(i);
        System.out.println(k);
    }
}

然后将代码进行编译成字节码文件,我们再次查看 ,发现在字节码的左边有一个行号标识,它其实就是指令地址,用于指向当前执行到哪里。

0: bipush        10
2: istore_1
3: bipush        20
5: istore_2
6: iload_1
7: iload_2
8: iadd
9: istore_3
10: return

通过PC寄存器,我们就可以知道当前程序执行到哪一步了
在这里插入图片描述

两个常见问题

使用PC寄存器存储字节码指令地址有什么用呢?

  • 因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行。
  • JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令。

PC寄存器为什么被设定为私有的?

  • 我们都知道所谓的多线程在一个特定的时间段内只会执行其中某一个线程的方法,CPU会不停地做任务切换,这样必然导致经常中断或恢复,如何保证分毫无差呢?为了能够准确地记录各个线程正在执行的当前字节码指令地址,最好的办法自然是为每一个线程都分配一个PC寄存器,这样一来各个线程之间便可以进行独立计算,从而不会出现相互干扰的情况。
  • 由于CPU时间片轮限制,众多线程在并发执行过程中,任何一个确定的时刻,一个处理器或者多核处理器中的一个内核,只会执行某个线程中的一条指令。
  • 这样必然导致经常中断或恢复,如何保证分毫无差呢?每个线程在创建后,都会产生自己的程序计数器和栈帧,程序计数器在各个线程之间互不影响。

在这里插入图片描述

CPU时间片

CPU时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片。
在宏观上:俄们可以同时打开多个应用程序,每个程序并行不悖,同时运行。
但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。
在这里插入图片描述

【JVM】JVM01(概述-程序计数器-栈-堆) 面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等” 阅读详情

相关推荐

unity之——解决利用Jenkins在Windows环境下打包unity工程中的场景为apk包,打包打不出来的问题。并且介绍Jenkins从安装到环境配置,调用unity代码的过程(填坑)!!!!!

今天第一次接触Jenkins,比较头疼。网上的Jenkins配置环境相关的资料比较散乱,并且在Windows平台下相关的配置更是少之又少。我在这里讲一下从Jenkins安装到构建工程。打包unity工程的apk包的过程。 1.首先去Jenkins官网下载安装就不说了,安装完成之后在浏览器中输入http://localhost:8080(默认访问地址)进入Jenkins web界面。进行账号的注册...

cgy56191948的博客 2020

JVM 程序计数器

概念 程序计数器的英文全称是Program Counter Register,又叫程序计数寄存器。Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。 即在物理上实现程序计数器是通过一个叫寄存器来实现的,我们的程序计数器是Java对物理硬件的屏蔽和抽象,他在物理上是通过寄存器来实现的。寄存器可以说是整个CPU组件里读取速度最快的一个单元,因为读取/写指令地址这个动作是非常频繁的。所以Java虚拟

PurineKing之博客 3583

双向全桥隔离DC-DC变换器(DAB)的调制优化与挑战解析

本文深入解析了双向全桥隔离DC-DC变换器(DAB)的核心调制技术及其面临的挑战。文章从基础的相移调制(SPS)入手,逐步探讨了扩展相移(EPS)、双重相移(DPS)等进阶策略,并重点分析了电流优化与零电压开通(ZVS)等硬核优化技巧。针对DAB在实际应用中存在的建模困难、多模块并联及数字实现等挑战,提供了实用的应对策略与设计思路,旨在帮助工程师在性能、复杂度与成本之间找到最佳平衡。

weixin_29271053的博客 571

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

程序计数器简介、程序计数器举例说明、程序计数器常见问题

码说芯语的博客 2383

C#图表开发避坑指南:Chart控件的Series和Points属性详解

本文深入解析C#图表开发中Chart控件的Series和Points核心属性,提供避坑指南。详细阐述了Series的数据序列管理、Points的高效操作与空值处理,以及多Series与ChartArea的协同配置,帮助开发者避免常见错误,实现稳定、高性能的数据可视化应用。

weixin_29313239的博客 363

【图像拼接】源码精读:Parallax-Tolerant Unsupervised Deep Image Stitching(UDIS++)

注:Pytorch代码。【图像拼接论文精读】专栏对应文章【图像拼接】论文精读:Parallax-Tolerant Unsupervised Deep Image Stitching(UDIS++)配合对应的文章阅读,效果更佳!注:请重点关注代码段中的注释!!!有一些讲解的东西直接写在代码段的注释中了,同时多关注红色字体和绿色字体!!!我认为深度学习方法和传统方法有很多相似之处。比如:深度学习中的损失函数和传统方法中的对齐项、失真项等其实原理相同,只是求解方式不同。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7272

一文理解JVM的程序计数器(PC)

本文我们将介绍PC计数器是如何工作的,如何表示跳转和循环等操作的,以及线程安全相关的问题。JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的信息。CPU只有把数据装载到寄存器才能够运行。但是这里并非是广义上所指的物理寄存器,在JVM中只是对PC寄存器的一种模拟,用来处理当前线程相关指令的计数器。有一点与CPU的寄存器是类似的,那就是占用空间小,但运行速度最快。

纵横千里 捭阖四方 的专栏 2001

视觉Transformer实战 | Data-efficient image Transformer(DeiT)详解与实现

在计算机视觉领域,Vision Transformer (ViT) 已经证明了纯 Transformer 架构在图像分类任务上的强大能力。然而,ViT 通常需要在大规模数据集上预训练才能达到最佳性能,DeiT (Data-efficient image Transformer) 通过引入一系列训练策略和优化,使得 Transformer 模型能够在相对较小的数据集上取得优异表现。本节将详细介绍 DeiT 的技术原理,并使用 PyTorch 从零开始实现 DeiT 模型。

盼小辉丶的博客 1341

2021-06-30

个人实验158页的图2.0、5.1、5.2、5.3。 一、实验名称: 1.四位移位寄存器的另一种代码; 2.一个n位移位寄存器; 3.递增计数器; 4.带并行载入端的递增计数器。 二、实验内容: 实验一:所有的操作都发生在时钟上升沿。如果L=1,4位数据R并行加载到寄存器;如果R=0,寄存器的内容向右移位,并且w输入端的值加载到最高位Q3。 实验二:R和Q的位宽用n定义,描述移位操作的else分支语句用for循环语句实现,可适用于由任意多个触发器组成的移位操作。 实验三:具有复位输入resetn 和使能输入

qq_54005560的博客 319

【图论】系列(七)图论的中心性度量方法及重要性评价指标

图论中的中心性度量方法是用来衡量图中各个节点(或顶点)相对重要性的指标。

qq_30066733的博客 1075

【ROS2实体机械臂驱动】封装珞石ROS2驱动库ros2_rokae_driver_lib

这一篇文章将封装为,和之前一篇文章《ROS2 编译、打包、封装三方库(Knet为例)_ros插件编译成静态库-优快云博客》写的封装,区别在于优化了cmake dependencies和include等属性和宏定义,同时对于多库内部依赖的情况做了特定处理,更加方便外部调用。其中珞石的编译参考博主之前的文章rokae xCoreSDK C++测试使用,这里不再做赘述。通过这篇文章对于如何打包机械臂厂家提供的三方库做了进一步说明,方便用于不同机械臂厂家的三方库封装调用。!!

机器人梦想家 Bing Lee 1397

JVM程序计数器

Program Counter Register,又叫程序计数寄存器在物理上程序计数器叫寄存器CPU只有把数据装载到寄存器中才能够正常执行指令。

Cyx12321的博客 415

西门子S7-1200PLC控制步进电机的组态编程和具体步骤

西门子S7-1200PLC控制步进电机的组态编程和具体步骤 硬件准备: 1) 一个S7-1214C DC/DC/DC,订货号:6ES7 214-1AG40-0XB0 2) 一个86系的步进电机+相应的驱动器 3) 一个20A的西门子24V电源(步进驱动器及plc电源) 4) Portal V15版本 组态及编程: 1) 创建一个验证项目,添加cpu( S7-1214C),双击“工艺对象”,选择“运动控制”的TO_PositioningAxis V6.0版本,如下图所示: 2) “确定”后,系统自动生成名

Robot_PLC_HMI_Automation 1万+

JVM-第四章 程序计数器

JVM-第四章 程序计数器

Strange_boy的博客 255

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JVM第四章:程序计数器

资料来源:尚硅谷宋红康老师授课资料 程序计数器 介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。 它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域

迦南学院 168

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jvm-第四章:程序计数器

1.PC 寄存器概述 参考文档地址 https://docs.oracle.com/javase/specs/jvms/se8/html/index.html PC 寄存器介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不

u014692224的博客 134

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

尚硅谷JVM从入门到精通宋红康版|第四章、程序计数器

程序计数器 介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。 它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。 在JVM规范中,每个线程都有它自

weixin_45759791的博客 825

JVM学习笔记 - 第四章 程序计数器

目录1. PC寄存器介绍2. PC寄存器的作用3. 代码示例4. 两个常见的面试问题5. CPU时间片 JVM官方文档 1. PC寄存器介绍 JVM中的程序计数器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行 这里,并非广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的

weixin_44857327的博客 192

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

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

m0_45097637的博客 405

JVM虚拟机(HotSpot)第四章:程序计数器(PC寄存器)

JVM虚拟机(HotSpot) 第四章:程序计数器(PC寄存器) JVM的程序计数寄存器(Program Counter Register),不是广义上的物理寄存器,可以将其翻译为PC计数器(或指令计数器) 会更加容易理 解,JVM 中的PC寄存器是对物理PC寄存器的一种抽象模拟。 作用: PC寄存器用来存储指向下一条指令的体制,也就是即将要执行的指令代码。由执行引擎读取下一条指令。它是一个很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。 每一个线程拥有一个PC寄存器且线程是私有的,生命周

sfwewqf的博客 583

JVM程序计数器:核心机制与优化

💡亲爱的技术伙伴们:你是否正被这些问题困扰——我打磨的《 Java高级开发岗面试急救包》正式上线!课程介绍如下:📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》、(架构篇)、作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

JavaCodePro的博客 1069

JVM - 程序计数器

JVM - 程序计数器

目目沐沐 5万+

什么是JVM中的程序计数器

什么是JVM中的程序计数器

qq_63945982的博客 981
上一篇: JVM-第三章:运行时数据区概述及线程
下一篇: JVM-第五章:虚拟机栈
Xqhardstudy
博客等级 码龄6年 2粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值