一 PC寄存器介绍

程序计数器又名PC寄存器

1)register的命令是源于cpu寄存器,寄存器存储指令相关的现场信息,CPU只有把数据装载到寄存器才能够运行。
2)JVM中的 pc register 并非广义上所指的物理寄存器,翻译为:PC计数器更加贴切。JVM的PC寄存器是对物理上的 pc 寄存器的一种模拟。

1.1 作用

1)用来存储指向下一条指令的地址,也就是即将要执行的代码,由执行引擎来读取。
image.png

1.2 概述

1)它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。
2)在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。
3)任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址。或者,如果是在执行native方法,则是未指定值(undefned)。

4)它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
5)字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。
6)它是唯一一个在Java虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。

二 常见问题

2.1 为什么要使用程序计数器来记录当前线程的执行地址

1)因为cpu执行的时候是不断的切换线程的,切换回当前线程的时候,需要执行下一步的执行指令.
2)jvm的字节码解析器就是通过pc寄存器来执行下一步该执行什么指令。

2.2 PC计数器为什么要设置成私有的

1)因为cpu是在并发的执行多个线程,当前线程的执行位置需要自己的来记录。
2)如果pc计数器是线程共享的,则当cpu切换回到该线程的时候,pc计数器指向的位置已经不是该线程需要执行的位置了。

2.3 CPU时间片

1)CPU时间片即是CPU分配给各个程序的时间,每个线程被分配到的一个时间段,被称作它的时间片。
2)在宏观上:我们可以同时地打开多个应用程序,每个程序并行不悖,同时运行。
3)但是在微观之上:由于只有一个CPU, 一次只能处理程序要求地一部分,引入时间片的概念就可以让每个程序轮流来执行。