【JVM基础02】——组成-程序计数器解读

1- 引言:程序计数器

1-1 程序计数器是什么?为什么用程序计数器?(What)(Why)

  • 程序计数器 是运行时数据区的一部分,称为 PC register。
  • 它是线程私有的,不存在线程安全问题,主要用于保存字节码行号,记录正在执行的字节码指令的地址。

image.png


2- 核心:程序计数器的原理(How)

2-1 使用 javap 查看程序计数器的作用

  • 打印堆栈大小,局部变量的数量和方法的参数。
javap -v xx.class 
  • 举例说明:程序计数器的作用
public class Application {

    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

image.png
对于上述代码

  1. 获取 class 文件:通过编译找到目标 target 文件夹中的 class 文件。
  2. 反汇编字节码:右键 class 文件,打开命令窗口,输入 javap -v Application.class 命令查看字节码的反汇编信息。
  3. 字节码分析
    • getstatic:获取静态变量 System.out,它是一个静态属性,类型为 PrintStream
    • ldc:加载常量 hello world,这是一个字符串常量。
    • invokevirtual:调用方法 PrintStream.println,打印字符串。
    • return:结束方法执行。
  4. 字节码执行顺序:字节码指令按顺序执行,程序计数器记录每个线程的执行行号。
  5. 多线程示例:程序计数器记录每个线程执行的行号,确保线程被中断后可以继续执行。

结论:对于 一行 Java 代码在被转为字节码执行时,会被拆分成很多行进行执行,之所以需要程序计数器是因为,通过程序计数器可以记录 字节码行号,记录正在执行的字节码指令的地址


2-2 多线程下程序计数器原理举例

  • 多线程环境下,程序计数器通过记录每个线程的执行行号,确保线程在被中断后能从中断处继续执行。
  • 比如线程 1 先执行到第 10 行,此时时间片被 线程2 夺走,当下次再次切换回线程 1 时候,程序计数器使线程 1 可以继续执行第 10 行 字节码。

image.png


3- 小结:什么是程序计数器?

在这里插入图片描述

相关推荐

  1. JVM基础篇---02

    2024-07-16 05:52:01       60 阅读
  2. JVM-02

    2024-07-16 05:52:01       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 05:52:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 05:52:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 05:52:01       57 阅读
  4. Python语言-面向对象

    2024-07-16 05:52:01       68 阅读

热门阅读

  1. 机器学习与神经网络之间的关系 --九五小庞

    2024-07-16 05:52:01       21 阅读
  2. 面试题011-数据库-MySQL(事物+锁)

    2024-07-16 05:52:01       31 阅读
  3. Makefile 自动化变量以及模式匹配

    2024-07-16 05:52:01       25 阅读
  4. 云原生、Serverless、微服务概念

    2024-07-16 05:52:01       30 阅读
  5. x264 编码过程中视频相关数据流转分析

    2024-07-16 05:52:01       23 阅读
  6. Spring 如何解决循环依赖问题

    2024-07-16 05:52:01       26 阅读
  7. Python小工具—txt转excel和word

    2024-07-16 05:52:01       21 阅读
  8. Matplotlib库学习之mpl_toolkits.mplot3d.Axes3D函数

    2024-07-16 05:52:01       27 阅读
  9. uniapp 如何实现路由拦截,路由守卫

    2024-07-16 05:52:01       22 阅读
  10. 健康管理平台的元宇宙革新

    2024-07-16 05:52:01       17 阅读
  11. Spring Batch批量处理数据

    2024-07-16 05:52:01       25 阅读
  12. lua package.path

    2024-07-16 05:52:01       23 阅读
  13. 【AI原理解析】—支持向量机原理

    2024-07-16 05:52:01       25 阅读