程序计数寄存器

Posted strandtrack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序计数寄存器相关的知识,希望对你有一定的参考价值。

作用:

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

简介:

他是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域,每个线程都有自己的程序计数寄存器,是线程私有的。

举例:

举例之前,先明确一个概念:

就是反编译之后,可以看到0:iconst_3这样的,0就是指令地址,iconst_3就是操作指令。

现在开始正式举例:

假设有三个线程ABC,切换线程时,A线程执行到第五步,也就是上面说的指令地址5,这时候切换到B了,那再切换回来怎么办呢?A线程的程序计数寄存器就存了5,等切换回A线程的时候就从第五步开始执行,这就是程序计数寄存器的作用。

这也是为什么程序计数寄存器为什么说是线程私有的原因,因为如果是共有的,共享的,那么我从A线程切换到B线程的时候,程序计数寄存器存的是5,这时候我B线程执行到第3步再切换到C线程,程序计数寄存器存的就是3了,这时候如果我还是回到A线程的话,那么就是执行的第三步了,但我要执行的是第五步,所以必须保证线程私有。

 

面试题:

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

答:因为CPU需要不停的切换各个线程,这时候切换回来之后,就得知道接着要从那开始执行。

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

以上是关于程序计数寄存器的主要内容,如果未能解决你的问题,请参考以下文章

三菱plc,不用计数器C,如何实现寄存器+1+1+1……累计?

程序计数器

程序计数器

JVM之内存与垃圾回收篇程序计数器

通用寄存器起啥作用?

JVM程序计数器PC寄存器