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,同一时间只能处理一个线程,如何公平,引入时间片,每个程序轮流执行;
     *                      -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
     *

     */

  

posted on 2022-04-24 10:49  anpeiyong  阅读(16)  评论(0编辑  收藏  举报

导航