栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM虚拟机(HotSpot)第四章:程序计数器(PC寄存器)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM虚拟机(HotSpot)第四章:程序计数器(PC寄存器)

JVM虚拟机(HotSpot) 第四章:程序计数器(PC寄存器)


JVM的程序计数寄存器(Program Counter Register),不是广义上的物理寄存器,可以将其翻译为PC计数器(或指令计数器) 会更加容易理 解,JVM 中的PC寄存器是对物理PC寄存器的一种抽象模拟。

作用:

PC寄存器用来存储指向下一条指令的体制,也就是即将要执行的指令代码。由执行引擎读取下一条指令。它是一个很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。

  1. 每一个线程拥有一个PC寄存器且线程是私有的,生命周期与线程的生命周期保持一致。
  2. 每一个栈帧对应一个方法 ,任何时候一个线程只有一个方法在执行,也就是所谓的当前方法。
  3. 指令会被分配到栈的空间当中
    栈没有垃圾回收(GC)但是可能会发生溢出(OOM)的情况,PC寄存器不会出现溢出的情况同时也没有垃圾回收机制。堆和方法区会有垃圾回收机制(GC)同样也可能会发生溢出

常见的问题: 1. 使用PC寄存器存储字节码指令地址有什么用呢?

因为PC寄存器需要不停的切换各个线程,这时候切换回来以后,就需要知道要从那里接着执行。

2. 为什么使用PC寄存器记录当前线程的执行地址呢?

JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条该执行什么样的字节码指令。

3. 为什么PC寄存器会被设定为线程私有

为了能够准确的记录每一个线程正在执行的当前字节码指令地址,最好的办法自然就是为每一个线程都提供一个PC寄存器。

时间片

并行:(多个线程同时执行)
并发:(多个线程之间来回轮流执行)

CPU时间片就是CPU分配给哥哥程序的事件,每个线程被分配一个时间段。
宏观:我们可以打开多个应用程序,每个应用程序并行,同时运行
微观:由于只有一个CPU,一次只能处理程序要求的一部分,为了处理公平,引入了时间片,每个程序轮流执行。

由于CPU事件片轮限制,众多线程在并发执行过程中会,任何一个确定的时刻,一个处理器或者多核处理其中的一个内核只会执行某个线程其中的的一条指令。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/585030.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号