PC 寄存器介绍

JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。

一个线程对应一个 JVM Stack。JVM Stack 中包含一组 Stack Frame。当 JVM 调用一个 Java 方法时,它从对应类的类型信息中得到此方法的局部变量区和操作数栈的大小,并据此分配栈帧内存,然后压入 JVM 栈中。

在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧,与这个栈帧相关联的方法称为当前方法。

PC寄存器的作用

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

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

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

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

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

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

6.它是唯一一个在java虚拟机规范中没有规定任何OOM(Out Of Memery)情况的区域,而且没有垃圾回收

代码示例

PC寄存器面试常见问题

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

(1)多线程宏观上是并行(多个事件在同一时刻同时发生)的,但实际上是并发交替执行的

(2)因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行

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

所以,众多线程在并发执行过程中,任何一个确定的时刻,一个处理器或者多核处理器中的一个内核,只会执行某个线程中的一条指令。这样必然导致经常中断或恢复,如何保证分毫无差呢?每个线程在创建后,都会产生自己的程序计数器和栈帧,程序计数器在各个线程之间互不影响。

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

(1)我们都知道所谓的多线程在一个特定的时间段内只会执行其中某一个线程的方法,CPU会不停滴做任务切换,这样必然会导致经常中断或恢复,如何保证分毫无差呢?

(2)为了能够准确地记录各个线程正在执行的当前字节码指令地址,最好的办法自然是为每一个线程都分配一个PC寄存器,这样一来各个线程之间便可以进行独立计算,从而不会出现相互干扰的情况。

java 中pc寄存器的作用_PC寄存器相关推荐

  1. 【Java_基础】Java中Native关键字的作用

    本篇博文转载与:Java中Native关键字的作用 转载于:https://www.cnblogs.com/leiblog/p/10529056.html

  2. java中输出时 什么作用_JAVA中输入和输出处理(Java I/O)重点总结

    文件-使用File类操作文件: 什么是文件?  文件可认为是相关记录或放在一起的数据的集合. 文件一般存储在哪里?  储存在存储设备里. Java程序如何访问文件?  Java API:java.io ...

  3. Java中static的作用详解_详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...

  4. java中static修饰函数_详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...

  5. java配置lib_javalib中文 java中的lib什么作用呢

    java中jar包和lib的区别? lib你可以理解为library(库),是一个文件夹,按照规范一般就是存放第三方的资源 JAR(Java Archive,Java 归档文件)是与平台无关的文件格式 ...

  6. Java中的构造器的作用?(构造方法的作用与特点)

    Java中的构造器的作用是什么? 今天看到一个问题,那就是Java中的构造器的作用是什么,第一反应是:嗯?构造器?不就是构造方法嘛,只是只是叫法不一样,但是习惯喊构造方法的我还是忍不住吐槽了,回归正题 ...

  7. Java中import语句的作用

    Java中import语句的作用 为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包.使用"import"语句可完成此功能.在 java 源文件中 import ...

  8. Java中super关键字及其作用

    Java中super关键字及其作用 super关键字及其作用 A:super关键字指代父类对象引用(super代表父类存储空间的标识) B:作用: a:访问被子类隐藏的父类同名成员变量和成员方法 : ...

  9. java 单独用this_以下不是Java中this关键字的作用的是()。

    [单选题]竖向荷载作用下剪力墙内力的计算,不考虑结构的连续性,可近似认为各片剪力墙只承受 [ ] [填空题(客观)]打开"开始"菜单的快捷键是 . [单选题]重载的方法需要通过形式 ...

最新文章

  1. Nagios+mutt+msmtp 无法发送邮件的问题!
  2. 机器人末端执行器气爪怎么吸合_平行气爪工作原理是什么?平行气爪原理图作用是什么...
  3. java程序练习:猜字母
  4. 重庆三峡学院计算机应用技术,重庆三峡学院 数学与计算机学院 刘福明老师简介 联系方式 手机电话 邮箱...
  5. J-1 Java概述
  6. pcie3.0一条通道带宽_小技巧|内存双通道提升性能
  7. 【Python CheckiO 题解】Date and Time Converter
  8. 大龄屌丝自学笔记--Java零基础到菜鸟--036
  9. 技巧 | 数据有缺失值情况下的一个处理方法
  10. 高精度练习(hdoj1042)
  11. java内部类的作用_java 内部类的好处和缺点(上)
  12. DFS ZOJ 1002/HDOJ 1045 Fire Net
  13. 软件评测师教程书本对软考的作用有多大?
  14. RH850 MPU 实现介绍
  15. php soapfault 怎么用,SoapFault出现的问题及解决办法分享
  16. 1965:【14NOIP普及组】珠心算测验
  17. 【重点】心田花开:人教版初一语文上册《从百草园到三味书屋》知识点
  18. 网络正常,浏览器显示代理服务器没有响应怎么办?
  19. 学习Python第5天
  20. Scrapy中对xpath使用re

热门文章

  1. 【SPEA测试设备】黑科技赋能晶圆检测——TH2000晶圆测试仪
  2. matlab将每次迭代结果画图,机器学习-线性回归以及MATLAB octave实现
  3. Cisco路由器配置手册
  4. 错误:org.apache.jasper.JasperException 无法为JSP编译类
  5. 运算放大器初探-运算放大器的选型
  6. 超五成大学生期待月薪过万 中青报:大学生和用人单位不妨“双向奔赴”
  7. AMiner会议论文推荐第二十六期
  8. 2020网鼎杯玄武组re baby_vm复盘
  9. PD 重要监控指标详解
  10. vue中关于计算属性