JVM——PC寄存器(Program Counter Register,程序计数器)

JVM模型简图

运行时数据区

上图中绿色部分详细图

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

作用

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

  • 它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖PC寄存器来完成
  • 字节码解释器工作时就是通过改变这个PC寄存器的值来选取下一条需要执行的指令
  • PC寄存器与本地方法栈、方法区、堆区、线程JVM栈不同,其没有OutOtMemoryError(内存溢出)

概述

Register源于CPU的寄存器,寄存器储存指令相关的信息,CPU只有把数据装在到寄存器才能运行。

而JVM中的寄存器概念并非广义上所指的物理寄存器,JVM的PC寄存器是对物理PC寄存器的的一种抽象模拟。


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

JVM中每个线程都有它自己的PC寄存器,即线程私有的,生命周期与线程的生命周期一致

任何时间,一个线程都只会有一个方法在执行,即当前方法,PC寄存器会存储正在执行的Java方法的JVM指令地址。如果是执行的是native方法,则是未指定值(undefind,即PC寄存器不储存本地方法的执行指令,native方法会有对应的本地方法栈)


使用javap -v xxx.class命令查看字节码文件:

PC寄存器就是用来存储指令地址,执行引擎可以通过PC寄存器中当前的指令地址,翻译成机器指令,交由CPU处理

  • 由于CPU是有时间片的,并不是一直在处理某些任务,会在线程间来回的切换,切来切去的过程中,CPU需要知道从哪里开始继续执行。JVM的字节码解释器就要通过改变PC寄存器中指令地址来明确下一条执行的指令是什么
  • 同上述解释可以得出,PC寄存器是每个线程私有一个的,PC寄存器是不可以多线程共享的

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值