【从零开始学习JVM】程序计数器


🌈 个人主页: Hygge_Code
🔥 热门专栏:从0开始学习Java | Linux学习 | 计算机网络
💫 个人格言: "既然选择了远方,便不顾风雨兼程"

文章目录

程序计数器

  • 为什么需要程序计数器:Java 支持多线程并发运行,CPU 调度器会为每个线程分配时间片。如果线程 1 在时间片内没有执行完,就需要保存当前执行状态,切换到线程 2;等下次切换回来时,要能接着上次的位置继续执行。

     线程切换后,要知道"下一条指令该从哪儿执行",就需要依靠程序计数器

     由于每个线程执行指令的位置互不干扰,因此每个线程都有独立的程序计数器

  • 程序计数器的具体作用:程序计数器是一块较小的内存空间,可以看作当前线程所执行字节码的行号指示器

     字节码解释器通过改变计数器的值来选取下一条需要执行的字节码指令。分支、循环、跳转、异常处理、线程恢复等功能,都依赖这个计数器完成。

    主要两个作用:

    • 字节码解释器通过程序计数器依次读取指令,实现代码的流程控制(顺序、选择、循环、异常处理等)。
    • 多线程环境下,记录当前线程执行位置,线程切回后能从上次中断处继续执行。
  • 程序计数器的生命周期与线程完全同步

    • 创建:随着线程的创建而创建
    • 销毁:随着线程的销毁而销毁
  • 补充

    • 线程执行 Java 方法 (非native方法)时,程序计数器记录的是当前 JVM 字节码指令的地址
    • 线程执行 native 本地方法 时,计数器值为 Undefined(未定义)。因为 native 方法不基于 JVM 字节码执行,而是通过 JNI 调用底层系统代码,JVM 无需记录字节码地址。

⚠️注意:程序计数器是 JVM 规范中唯一一个不会发生 OutOfMemoryError 的内存区域。因为它只存一个地址,占用内存极小且固定,不会出现内存溢出。


如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
憧憬成为java架构高手的小白3 分钟前
git工作流程简化版
java·spring boot·git
触底反弹6 分钟前
苹果换芯片,用户说「真香」;微软换芯片,用户说「退货」—— 同样的事,为什么结果完全相反?
java·架构·编程语言
QING6187 分钟前
Android面试 —— 八股文之app启动流程
android·面试·app
澜舟孟子开源社区13 分钟前
架构创新、上下文工程、可信计算、自适应优化:澜舟科技智能体核心技术解析
java·科技·架构
淘矿人14 分钟前
DeepSeek V4对决Claude 4.8:AI模型终极横评
java·开发语言·人工智能·python·sql·php·pygame
TE-茶叶蛋21 分钟前
学习GitNexus中优雅的自动滚动:useAutoScroll Hook 实现
学习
IT利刃出鞘33 分钟前
Java多线程--三种写法(Thread、Runnable、Callable)
java·多线程
小陈phd41 分钟前
多模态大模型学习笔记(四十八)——从自然语言到 SQL:大模型时代结构化数据查询的技术革命与落地实践
笔记·sql·学习
两年半的个人练习生^_^1 小时前
JMM 进阶:彻底理解 volatile 实现原理
java·开发语言
Raink老师1 小时前
【AI面试临阵磨枪-91】Skill 市场 / Hub 设计:审核、上架、评分、更新、安全扫描?
人工智能·安全·面试