美文网首页程序员编程语言-JVM系列
你以为你真的懂了JVM了吗?我问你几个寄存器的问题你就傻眼了!

你以为你真的懂了JVM了吗?我问你几个寄存器的问题你就傻眼了!

作者: 码上入坟 | 来源:发表于2020-12-23 16:58 被阅读0次
    图片

    处理器的底部和四周有大量的引脚,可以接受外界发来传送的电信号。每个引脚都有自己的用处。有些引脚用来将参与运算的数字输送到处理器内部,有些引脚可以重复使用的。

    假如要进行加法运算,这些引脚将依次把加数和被加数送入处理器,处理器一旦接受信号,将会以二进制数组成的电信号反应在引脚相连的内部线路上,是一组高低电平的组合,代表着二进制数的每一位,此时必须用寄存器(Register)(是双向器件)的暂时存储,之所以这样做,是因为相同的引脚和线路马上要输入被加数,重复之前的工作,也正因为这个原因,这些内部线路称为处理数据总线。它们之间通过控制器发出指令,控制各个器件在某个正确的时间做某个动作。

    图中寄存器(Register A)和寄存器(Register B)将分别参与运算,假设寄存器(Register A)暂时存储的是加数,寄存器(Register B)暂时存储的是被加数。此时寄存器(Register A)和寄存器(Register B)都暂时存储了数据,将不再受外部数据的影响。运算逻辑部件输出结果,结果被输送到寄存器(Register C),通过数据总线输送到处理器外面,或再次送入到寄存器(Register A)和寄存器(Register B)参与运算。

    程序计数器(PC寄存器)

    JVM中PC寄存器是对计算机中硬件寄存器的一个抽象模拟,不是一个东西的.PC寄存器就是作用跟物理寄存器差不多,都是存储数据的作用.它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。PC寄存器的名字起为PC计数器其实更准确。

    作用:用来存储 指向下一条指令的地址。

    public class Test{ 
            public static void main(String[] args){
                    int a = 138;
                    int b = 362;
                    int c = a+b; 
            }
    }
    

    反编译查看字节码:javap -v Test.class

    图片

    寄存器的好处

    因为一个线程一个寄存器,这样线程在来回切换的时候,知道要继续执行哪行代码.所以寄存器肯定是不能多个线程共享的。

    PC寄存器可以理解为: 值日表;数据库中的结果集,可以一行一行取数据;集合中的迭代器,一次一次调用next()来获取数据。

    注意:

    [1]PC寄存器不存在垃圾回收,因为他一直指向下一个地址,直接被下一个地址覆盖了之前的。

    [2]PC寄存器永远不存在内存溢出: OutOfMemory

    相关文章

      网友评论

        本文标题:你以为你真的懂了JVM了吗?我问你几个寄存器的问题你就傻眼了!

        本文链接:https://www.haomeiwen.com/subject/sfkunktx.html