【jvm】程序计数器是如何计数的

目录

          • [1. 说明](#1. 说明)
          • [2. 计数原理](#2. 计数原理)
            • [2.1 字节码解释执行](#2.1 字节码解释执行)
            • [2.2 线程隔离](#2.2 线程隔离)
            • [2.3 执行流程控制](#2.3 执行流程控制)
          • [3. 特殊情况处理](#3. 特殊情况处理)
            • [3.1 执行Native方法](#3.1 执行Native方法)
            • [3.2 异常处理](#3.2 异常处理)
1. 说明
  • 1.JVM(Java Virtual Machine)程序计数器是Java虚拟机在执行Java程序时的一个重要组成部分,用于记录当前线程正在执行的字节码指令的地址。
  • 2.定义:程序计数器是当前线程正在执行的字节码的行号指示器,也可以看作是指向当前线程正在执行的字节码指令的指针。
  • 3.作用:它是指令控制的指示器,用于记录程序执行过程中的位置,以支持线程切换后的恢复执行、循环、跳转、异常处理等功能。
2. 计数原理
2.1 字节码解释执行
  • 1.编译后的Java代码被转换成字节码,存储在Java虚拟机的方法区内。
  • 2.字节码解释器读取内存中的字节码,按照顺序读取字节码指令,并翻译成相应的操作执行。
  • 3.每执行完一条字节码指令,程序计数器的值就会更新,以指向下一条需要执行的字节码指令。
2.2 线程隔离
  • 1.每个线程在JVM中都有一个独立的程序计数器,用于记录各自线程执行的字节码指令地址。
  • 2.线程之间的程序计数器互不影响,独立存储,保证了线程执行的安全性和正确性。
2.3 执行流程控制
  • 1.分支、循环、跳转等指令的执行,都依赖于程序计数器的值来确定下一步的执行位置。
  • 2.当遇到分支或跳转指令时,程序计数器的值会被更新为跳转目标地址。
3. 特殊情况处理
3.1 执行Native方法
  • 1.当线程执行的是本地(Native)方法时,程序计数器的值会变为Undefined(未定义)。
  • 2.这是因为Native方法是通过Java Native Interface(JNI)调用本地C/C++库实现的,非Java字节码实现,因此无法统计其执行位置。
3.2 异常处理
  • 1.当异常发生时,程序计数器的值可以被用于确定异常发生的位置,从而帮助异常处理机制恢复或处理错误。
相关推荐
老三牛擦1 天前
掌握数据结构及算法、计算机组成原理、操作系统、计算机网络和软件工程基础知识,践行Scrum敏捷开发理念
jvm
码上上班1 天前
k3s学习
jvm·学习
用户094248568032 天前
第18章:ConcurrentHashMap与并发容器实战
java·jvm
一条破秋裤2 天前
Linux 线程分离与主动取消:pthread_detach、pthread_cancel
java·linux·jvm
bksczm2 天前
零基础面试题1
jvm·数据结构·算法
今天的砖头有点烫手啊2 天前
GC 算法与垃圾收集器演进:从 Serial 到 ZGC
java·jvm
johnny2332 天前
JVM生态下Web开发框架:SparkJava、Javalin、Micronaut、SparkKotlin
jvm
晨小安2 天前
ThreadLocal及其内存泄漏问题深度解析
java·jvm·tomcat·哈希表
jingli93 天前
一个测试用例把连接池卡死 30 秒:SQLite 连接池 max_size=1 下的重入自锁复盘
jvm·sqlite·测试用例
imDwAaY3 天前
Java中垃圾回收器 G1 和 CMS 有什么区别?
jvm·后端