JVM系列(六):JVM内存区域中程序计数器介绍

举报
IT技术分享社区 发表于 2022/10/30 21:16:14 2022/10/30
【摘要】 JVM中的程序计数寄存器(Program Counter Register)中Register的命名来源于CPU的寄存器,寄存器用来存储指令相关的现场信息。

image_615492ce.png

今天继续给大家分享JVM的相关知识,今天介绍一下JVM内存区域的程序计数器。

1、程序计数器概念

JVM中的程序计数寄存器(Program Counter Register)中Register的命名来源于CPU的寄存器,寄存器用来存储指令相关的现场信息。

CPU只有把数据装载到寄存器中才能够正常执行指令。

JVM中的寄存器不是物理上的寄存器而是对物理寄存器的抽象模拟。

程序计数器有时候也被称为为程序钩子

2、程序计数器的作用

程序计数器是JVM内存区域中一块较小的内存空间,可以认为是当前Java线程所执行的字节码的行号指示器。字节码解释器工作是通过改变这个计数器的值来定位选取下一条待执行的字节码指令,选择、循环、异常处理、线程恢复等功能都需要依赖程序计数器来完成。

image_c0d342ec.png

说明:JVM虚拟机为了保证线程切换后还能恢复到上次正确执行的位置,JVM给每条Java线程都分配了一个独立的程序计数器,这样各线程之间计数器互不影响,独立存储和对应的Java线程生命周期保持一致。

  • 字节码解释器通过改变程序计数器来依次读取指令,从而实现Java代码的流程控制,比如:顺序执行、选择、循环、异常处理等。
  • 在多线程的情况下,程序计数器主要用于记录当前线程执行的具体位置,这样在线程切换回来的时候知道该线程从哪一个环节开始执行。

3、程序计数器的特点

  • 每个Java线程独有,与其对应的Java线程的生命周期保持一致。
  • 占用JVM内存区域很小的一块(可忽略不计),读取速度很快
  • 负责准确记录每个线程当前执行到的具体位置
  • 执行本地方法,程序计数器会存储undefined
  • JVM中唯一一个不会出现Out Of Memory Error(内存溢出错误)的区域,也不需要进行垃圾回收
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。