[JVM] 5. 运行时数据区(2)-- 程序计数器(Program Counter Register)

一、概述

  1. JVM中的程序计数器(Program Counter Register)是对物理PC寄存器的一种抽象模拟。
  2. 它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。
  3. 在 JVM 规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。
  4. 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的 Java 方法的 JVM 指令地址;或者,如果是在执行 native 方法(本地方法),则是未指定值(undefined)。
  5. 它是唯一一个在Java虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域,因为它存储的是一个可预见大小的值。

 

二、作用

        程序寄存器(Program Counter Register)用来存储 下一条指令的地址,由执行引擎来读取下一条指令并执行。

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

例如这段代码:

我们对这段代码进行编译,的到PCRegisterTest.class,然后执行javap命令进行反编译。

我们查看这段代码:

左边一列0、2、3等是指令的偏移地址,右边的bipush 10等就是指令。

简单理解地址为0、地址为2的两个指令的意义是:把10压栈到1的位置。 

整体理解如下图:

 提前理解一下栈帧,一个栈帧可以理解为一个方法。

image-20220423212939649

 三、常见问题

1. 使用PC寄存器存储字节码指令地址有什么用呢? 或者是 为什么使用 PC 寄存器来记录当前线程的执行地址呢?

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

2. PC寄存器为什么被设定为线程私有?

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


 

参考:

3. 运行时数据区及程序计数器 · 语雀

百度安全验证

JVM运行时数据区_仅此而已_的博客-CSDN博客

JVM程序计数器_android jvm 程序计数器_轩*的博客-CSDN博客

JVM-第4章-程序计数器(Program Counter Register)_program priority register_小成同学_的博客-CSDN博客

为什么JVM规范中,程序计数器不会发生OutOfMemoryError_纵有疾风起 人生不言弃的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis之主从复制、哨兵、集群

文章目录 一、redis的高可用1.1 redis高可用的概念1.2 Redis的高可用技术 二、redis 主从复制2.1主从复制的原理2.2搭建Redis 主从复制 三、Redis 哨兵模式3.1搭建Redis 哨兵模式3.2启动哨兵模式3.3查看哨兵信息3.4故障模拟 四、Redis 群集模式4.1搭建Redis 群集模式 一、redis…

【Excel】excel多个单元格的内容合并到一个单元格,并使用分隔符

方法一:使用连接符 & 左键单击选中“D2”单元格,在D2单元格中输入公式“A2&B2&C2”,按“Enter”即可实现数据合并。 ------如果想连接的时候,中间加分隔符,可以使用:公式A2&"&#xf…

Azure Kinect 之 Note(一)

Azure Kinect Azure Kinect DK 是一款开发人员工具包,配有先进的AI 传感器,提供复杂的计算机视觉和语音模型。 Kinect 将深度传感器、空间麦克风阵列与视频摄像头和方向传感器整合成一体式的小型设备,提供多种模式、选项和软件开发工具包(S…

面试题更新之-HTML5的新特性

文章目录 导文新特性有哪些?HTML5的新特性带来了许多好处 导文 面试题更新之-HTML5的新特性 新特性有哪些? HTML5引入了许多新特性和改进,以下是一些HTML5的新特性: 语义化标签:HTML5引入了一系列的语义化标签&#…

远程在Ubuntu20.04安装nvidia显卡驱动

第零步,找人装一个todesk。 在终端运行: ifconfig 记住ip地址,后面要用。 第一步,安装软件: sudo apt-get update sudo apt-get install g gcc make 第二步,下载显卡驱动: 官方驱动 | NVI…

【ThinkPHP】实现一个逆向工程生成model

ThinkPHP为了节省一些重复的步骤,写了个简单版的生成model的工具,逆向生成model代码,节省时间,专注写业务代码。 ThinkPHP中的命令行也提供了一些生成代码的命令: make:controller 创建控制器 make:model 创建模型 m…

医院制剂研发与真实世界评价论坛圆满闭幕

医院制剂是新药的摇篮和宝库,现代科技为医院制剂的研发和转化赋能。在新时代新政策下,2023年07月16日,由湖南省药学会医院制剂研发与真实世界评价专业委员会(下称“专委会”)主委单位湖南易能生物医药有限公司&#xf…

划片机的技术分解

划片机是一种切割设备,主要用于将硬脆材料(如硅晶圆、蓝宝石基片、LED基片等)分割成较小的单元。其工作原理是以强力磨削为划切机理,通过空气静压电主轴带动刀片与工件接触点的划切线方向呈直线运动,将每一个具有独立电…

概率论的学习和整理18:为什么 P(至少成功1次) = Σ P(几何分布) ,总结几何分布和连续失败概率的关系,二项分布和累计成功k次的关系

目录 1 先说结论: 2 Σ几何分布的P(xn) P(n次试验至少成功1次) 2.1 几何分布的概率 2.2 这个是可以证明的,下面是推导过程 2.3 怎么理解呢? 3 另外,P(累计成功k次) ΣP(成功k次的二项分布) 3.1 成功k次的概率 和 累计成…

回收站怎么看当天删除的文件?在回收站中找不到被删除文件怎么回事

在日常使用电脑的过程中,我们常常会遭遇删除文件的错误,这时回收站就像是一剂“后悔药”。然而,当回收站中堆积了许多已删除的文件时,我们如何才能找到当天删除的文件呢?如果回收站在这时无法提供文件,我们…

本地Linux 部署 Dashy 并远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章:本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…

Python应用实例(二)数据可视化(一)

数据可视化(一) 1.安装Matplotlib2.绘制简单的折线图2.1 修改标签文字和线条粗细2.2 矫正图形2.3 使用内置样式2.4 使用scatter()绘制散点图并设置样式2.5 使用scatter()绘制一系列点2.6 自动计算数据2.7 自定义颜色2.8 使用颜色映射2.9 自动保存图表 数…

Visual Studio 自定义的颜色字体不生效

问题描述: 1、dll1中引用第三方库的类不识别,颜色黑白,自定义颜色不生效;定义的是结构体 2、在dll2引用另一个dll1中的结构体。结构体不识别,今天成员函数cpp中自定义颜色不生效。 问题解决方式: 全部清…

【MySQL备份与还原、索引、视图】练习

一、备份与还原 /***************************样例表***************************/CREATE DATABASE booksDB;use booksDB;CREATE TABLE books(bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL);INSERT INTO booksVALUES (11078, Lear…

macOS 14 Sonama - 小记

文章目录 Sonoma 官方资讯关于 Sonama 命名关于 壁纸Sonoma 官方资讯 macOS Sonoma Preview https://www.apple.com/hk/en/macos/sonoma-preview/官方视频介绍 Apple Events --> Watch the Keynote --> 00:43:13 (约14min) https://www.apple.com/hk/en/apple-events/mac…

树莓派使用Nginx 搭建轻量级网站远程访问

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 转载自cpolar极点云文章:树莓派使用Nginx 搭建轻量级网站远程访问 安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器&#…

2023年iOS App Store上架流程详解(上)

目录 1.注册开发者账号 2.登录并配置人员 3.申请证书和配置文件 一.证书管理​ 二.新建证书​ 三.使用appuploader服务同步证书​ 1)申请证书 2)添加Identifiers和配置App ID 3)申请配置文件 1.在Xcode项目中配置签名 2.上传应用包…

Web3的2048,Sui 8192能否打开全链游戏的大门?

作者:Peng SUN,Foresight News Sui 8192:一局游戏就是一个NFT Sui 8192智能合约基于Move语言编写,构成非常简单,包括游戏、Game Board与排行榜(Leaderboard)三部分,覆盖方块移动、…

前端Vue自定义可自由滚动新闻栏tabs选项卡标签栏标题栏组件

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。 通过组件化开发,可以有效实现…

【NLP】分步图解transformer 数学示例

一、说明 我知道transformer 架构可能看起来很可怕,你可能在网上或博客上遇到了各种解释。但是,在我的博客中,我将通过提供一个全面的数值示例来努力澄清它。通过这样做,我希望简化对变压器架构的理解。 二、输入和位置编码 让我们解决初始部分,我们将确定输入并计算它们…