JVM(七) 运行时数据区、pc寄存器

21 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Java运行时数据区

image.png

运行时数据区主要包括 JVM stacks 、PC寄存器(Program Counter Register)、方法区(Method Area)、本地方法栈(Native Method Stacks)、堆(Heap)。 Java 虚拟机定义了在程序执行期间使用的不同的运行时数据区。有些数据区是线程共享,有的则被线程独享。线程独享的数据区跟随线程的创建退出而创建销毁。直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。但是这部分内存也被频繁的使用,也可能会导致OOM(OutOfMemoryError)

线程共享的有堆和方法区,每个线程独享pc,虚拟机栈、本地方法栈

image.png

PC寄存器

PC:线程私有 先看一下官方文档当中的描述:

image.png PC寄存器用来存储指向下一条指令的地址,也就是将要执行那一条指令。由执行引擎读取系一条指令。

   1.是一块很小的内存空间,也是运行最快的存储区域
   2.线程私有
   3.只会记录当前线程正在执行Java代码的JVM指令地址。如果是native方法,则为空
   4.Java虚拟机规范中,这是唯一一块没有OOM的区域。

运行类似于

while(线程运行){
	取Pc当中的位置,找到对应的指令;
	执行该指令;
	pc++;
}

举个例子:现在有线程A,B;线程A运行到一半的时候被B抢占,这时候,pc寄存器就可以记录下A运行到哪,然后在A再次运行的时候就可以从中断的地方开始运行。