网上一些文章描述程序结束器:“记录下一条要执行的指令地址”。
但是我最近看的《深入理解JAVA虚拟机》中写道“如果线程正在执行的是一个java方法,这个计数器记录的就是正在执行的虚拟机字节码指令的地址”
所以哪一种说法是对的呢?可以再详细说一下使用程序计数器执行代码的流程吗?
求大佬!
网上一些文章描述程序结束器:“记录下一条要执行的指令地址”。
但是我最近看的《深入理解JAVA虚拟机》中写道“如果线程正在执行的是一个java方法,这个计数器记录的就是正在执行的虚拟机字节码指令的地址”
所以哪一种说法是对的呢?可以再详细说一下使用程序计数器执行代码的流程吗?
求大佬!
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
首先在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的
如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果正在执行的是Natvie方法,这个计数器值为空,
因为cpu需要不停的切换各个线程,再次切换回来时,就需要知道接着从哪儿开始继续执行。即JVM的字节码解释器需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令。