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

在JVM中程序执行的过程中,技术计数器起着控制程序下一步运行那一条指令,起着至关重要的作用,一切来了解了解JVM中的pc寄存器

1. PC Register是什么?

一张图表示PC寄存器在JVM的位置

JVM运行时数据区

  • 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行字节码的行号指示器;
  • JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟;
  • 每个线程拥有自己的PC寄存器,生命周期与线程生命周期相同;
  • PC存储当前线程正在执行方法的JVM指令地址,若是native方法,则是undefined;
  • 是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能需要依赖PC寄存器;
  • 是JVM中唯一一个未规定任何OutOfMemoryError情况的区域;

PC主要服务于线程中的虚拟机栈,继续虚拟机栈需要执行代码的行号,示例图如下所示:

PC寄存器

2. 例子

PC寄存器例子

上图,显示Java源码编译为.class文件后字节码的显示,PC计数器则记录的是当前执行的字节码行号;

3. 两个常见问题
3.1 PC寄存器存储字节码指令有什么用?

线程的执行时通过占用CPU时间片来执行的,时间片执行完后需让给其他线程,所以CPU需要不停的切换各个线程,切换回来后需要知道从哪里接着开始;

3.2 PC寄存器为什么设置为线程私有?

程序执行过程中,CPU不断切换线程来执行,所以PC计数器应该准确记录各个线程正在执行的当前字节码指令的地址,若共享,会导致程序执行混乱;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值