JVM的程序计数寄存器(Program Counter Register),不是广义上的物理寄存器,可以将其翻译为PC计数器(或指令计数器) 会更加容易理 解,JVM 中的PC寄存器是对物理PC寄存器的一种抽象模拟。
PC寄存器用来存储指向下一条指令的体制,也就是即将要执行的指令代码。由执行引擎读取下一条指令。它是一个很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。
- 每一个线程拥有一个PC寄存器且线程是私有的,生命周期与线程的生命周期保持一致。
- 每一个栈帧对应一个方法 ,任何时候一个线程只有一个方法在执行,也就是所谓的当前方法。
- 指令会被分配到栈的空间当中
栈没有垃圾回收(GC)但是可能会发生溢出(OOM)的情况,PC寄存器不会出现溢出的情况同时也没有垃圾回收机制。堆和方法区会有垃圾回收机制(GC)同样也可能会发生溢出
因为PC寄存器需要不停的切换各个线程,这时候切换回来以后,就需要知道要从那里接着执行。
2. 为什么使用PC寄存器记录当前线程的执行地址呢?JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条该执行什么样的字节码指令。
3. 为什么PC寄存器会被设定为线程私有为了能够准确的记录每一个线程正在执行的当前字节码指令地址,最好的办法自然就是为每一个线程都提供一个PC寄存器。
时间片并行:(多个线程同时执行)
并发:(多个线程之间来回轮流执行)
CPU时间片就是CPU分配给哥哥程序的事件,每个线程被分配一个时间段。
宏观:我们可以打开多个应用程序,每个应用程序并行,同时运行
微观:由于只有一个CPU,一次只能处理程序要求的一部分,为了处理公平,引入了时间片,每个程序轮流执行。
由于CPU事件片轮限制,众多线程在并发执行过程中会,任何一个确定的时刻,一个处理器或者多核处理其中的一个内核只会执行某个线程其中的的一条指令。



