JVM---运行时数据区-PC寄存器
/** * 【运行时数据区-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,同一时间只能处理一个线程,如何公平,引入时间片,每个程序轮流执行; * -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ * */