/**
* 【运行时数据区-PC寄存器】
*
* Program Counter Register(PC寄存器):
*
* 为什么使用PC寄存器 存储 当前线程的指令地址?
* CPU需要不停切换各个线程,这时候线程切换回来后,需要知道当前线程从哪开始继续执行;
*
* what?
* 程序计数寄存器,命名 源于 CPU寄存器;
* JVM的 PC寄存器 是对 物理PC寄存器的 抽象模拟;
*
* 作用:
* 存储 某个线程指向下一条指令的地址,由执行引擎 读取下一条指令;
*
* 很小的内存空间,几乎可以忽略不记;
* 运行速度最快的存储区域;
* 线程私有;
* 任何时间 一个线程 只有 一个方法在执行,也就是 当前方法;
* PC寄存器 存储 当前线程 正在执行的 Java方法的 JVM指令地址,
* 如果是 native方法,则是 undefined;
*
* 程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成;
*
* 唯一一个在JVM规范中没有任何 OutOfMemoryError的区域;
*
* eg:
* 指令地址(偏移地址) 操作指令
* 0 aload_0
* 1 invokespecial
* 4 return
*
* 执行引擎 读取 PC寄存器的指令地址 -> 操作 虚拟机栈中的栈桢的 局部变量表、操作数栈... -> 交给CPU执行;
*
* CPU时间片:
* CPU分配给各个程序的时间,每个线程被分配的一个事件段;
*
* 微观上,一个CPU,同一时间只能处理一个线程,如何公平,引入时间片,每个程序轮流执行;
* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
*
*/