JVM(二)程序计数器
我们已经知道了JVM的架构主要分为三部分:类加载器,JVM内存结构,执行引擎。
JVM内存结构又分为五部分,这节来简单的看看有关程序计数器知识点。
程序计数器:
定义:是用来保存下一条指令执行的地址。
特点:线程私有,不存在内存溢出问题。
简要的看下程序计数器的执行:
这是一段class字节码文件,它是由一条一条的指令构成的。指令前面的0 3 4等等数字表示一个虚拟的地址,当class字节码被类加载器加载到JVM内存后每一个虚拟地址会对应一个真正的物理地址。
程序计数器的作用就是保存下一条需要被执行指令的物理地址,而解释器只需要从程序计数器中找到下一条指令的物理地址就能找到该条指令,然后解释生成机器码,交给CPU进行执行。
程序计数器对应在硬件层面上的PC寄存器。
这里引出一个问题:有人认为,JVM虚拟机是分布在物理内存上的一块内存区域。
但是我个人认为这种观点是不正确的。我认为JVM是一种规范,是对计算机硬件的一种抽象模拟。
JVM中PC计数器就是对计算机中硬件寄存器的一个抽象模拟。
JVM中堆,栈就是对计算机中主存的一个抽象模拟。更加确切的说堆是计算机中主从的一个抽象模拟,栈是计算机中高速缓存,PC寄存器的一个抽象模拟。
把这些硬件进行一个集中抽象模拟就定义了一套JVM的规范定义。
当然,上诉是个人一些感悟观点,在这进行分享。如有误,望指出。