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

news/2024/10/31 1:33:04/

PC Register 介绍

  • JVM中的程序计数寄存器( Program Counter Register) 中,Register 的命名源于 CPU 的寄存器, 寄存器存储指令相关的现场信息。 CPU 只有把数据装载到寄存器才能够运行
  • JVM 中的 PC 寄存器是对物理 PC 寄存器的一种抽象模拟
  • PC 寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令
  • 它是一块很小的内存空间,几乎可以忽略不计,也是运行速度最快的存储区域
  • 在 JVM 规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期和线程的生命周期保持一致
  • 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的 Java 方法的 JVM 指令地址;或者,如果是在执行 native 方法,则是未指定值(undefined)
  • 它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成
  • 字节码解释器工作时就是通过改变这个计数器值来选择下一条需要执行的字节码指令
  • 它是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError异常

举例说明

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);}
}

经过  javap -verbose .\PCRegisterTest.class 后:

两个常见问题

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

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

PC 寄存器为什么会被设定为线程私有:

  • 由于 CPU 时间片轮转闲置,众多线程在并发执行过程中,任何一个确定的时刻,一个处理器或者多核处理器中的一个内核,只会执行某个线程中的一条指令
  • 为了能够准确的记录各个线程正在执行的当前字节码指令地址,最好的办法自然是为每一个线程都分配一个PC 寄存器,这样一来各个线程之间便可以进行独立计算,从而不会出现相互干扰的情况


http://www.ppmy.cn/news/62057.html

相关文章

Java阶段二Day16

Java阶段二Day16 文章目录 Java阶段二Day16SSMSpringBoot简述核心特性创建SpringBoot工程创建工程失败排查 MyBatis框架-注解管理概述MyBatis环境初始化整合MyBatisPojo对象设计Dao接口设计 SSM Spring:Spring是一个轻量级的容器和框架,为开发者提供了一…

antd-vue - - - - - row-selection的使用

1. 正常需求使用 antd-vue table 官方示例代码如下&#xff1a; <template><a-table :row-selection"rowSelection" :columns"columns" :data-source"data"><template #bodyCell"{ column, text }"><template …

jeecgboot online代码生成 一对多

首先把前后端环境都起起来&#xff0c;此处略 点击online表单开发&#xff0c;设计主附表&#xff0c;表示一对多(一对一)关系&#xff0c;“一”对应主表&#xff0c;“多”对应附表&#xff0c;如图 表设计完成&#xff0c;点击同步可直接在数据库中生成数据表。 附表注意…

ERP与WMS有哪些区别和联系?

一、什么是ERP ERP&#xff08;Enterprise Resource Planning&#xff09;是企业资源计划系统&#xff0c;它是一套综合的管理软件系统&#xff0c;可以帮助企业对各种业务管理、生产制造、供应链、销售财务等进行管理和优化。ERP系统的核心功能包括人力资源管理、物料管理、财…

如何在Emacs中设置字体大小?- 探索Emacs的设置字体大小方法

如何在Emacs中设置字体大小&#xff1f; Emacs是一款强大的文本编辑器&#xff0c;它拥有一些强大的功能&#xff0c;其中之一就是字体大小设置。虽然大多数编辑器都支持字体大小设置&#xff0c;但是Emacs的设置方式可能更加直观和易于使用。下面是如何在Emacs中设置字体大小的…

记录一次docker镜像迁移过程

1.在母本服务器上查看要复刻的docker镜像。 sv800:build 作为docker镜像源[repository:tag],使用docker save 指令提出docker镜像包rk3588.tar docker save -o rk3588.tar sv800:build 2.在新环境下加载docker镜像包&#xff0c;预先安装docker指令工具 docker load -i rk35…

等保定级怎么做

Q25:现在还没做等保还来得及吗?有什么影响? 答:来得及。种一棵树,最好的时间是十年前,其次是现在。可先根据定级备案要求和流程,先向公安递交定级备案文件,测评与整改预算提上日程,在经费未落实前,可以先进行系统定级、差距分析、整改计划制订等工作。 根据《等保工…

八、(了解即可)MyBatis懒加载(或者叫延迟加载)

文章目录 八、懒加载(了解即可)8.1 为啥需要懒加载?8.2 懒加载是什么&#xff1f;8.3 开启方式8.4 既然fetchType可以控制懒加载那么我仅仅配置fetchType不配置全局的可以吗&#xff1f;8.5 aggressiveLazyLoading是做什么么的&#xff1f;8.6 注意点8.7 案例验证懒加载准备工…