
JVM入门——运行时数据区及概述及线程
JVM内存布局
内存是非常重要的系统资源,是硬盘和 CPU的中间仓库及桥梁。
JVM内存布局规定了 Java 在运行过程中内存申请、分配管理的政策。
运行时数据区概述
运行时数据区域是JVM内存布局的核心组成部分,其主要组成如下
线程
线程 是一个程序里的运行单元。JVM允许一个应用有多个 线程 并行的执行。
在 Hotspot JVM 中,每个 线程 都与操作系统 本地线程 直接映射
当一个 Java线程 准备好执行以后,此时一个操作系统的 本地线程 也同时创建。Java线程 执行终止后,本地线程也会回收。
操作系统负责所有线程的安排调度到任何一个可用的CPU上。一旦本地线程初始化成功,它就会调用Java线程中的run()方法
程序计数寄存器
JVM中的程序计数寄存器(Program Counter Register)也称为程序计数器、pc 寄存器, 是对物理寄存器的一种抽象模拟。
是的,JVM(Java虚拟机)中的程序计数器(Program Counter, PC)寄存器是对物理PC寄存器的一种抽象模拟。在物理计算机体系结构中,PC寄存器通常用于存储下一条要执行的指令的地址。而在JVM中,PC寄存器的概念被用来跟踪当前正在执行的Java字节码指令的位置。
JVM中的PC寄存器具有以下特点:
- 线程私有:每个线程都有自己的PC寄存器,这意味着每个线程在执行时都有自己独立的指令流。
- 存储指令地址:PC寄存器存储的是当前线程正在执行的字节码指令的地址(或偏移量)。
- 只读:一旦字节码解释器或即时编译器(JIT)确定了下一条要执行的指令,PC寄存器的值就会被更新。这个值通常是只读的,因为它代表了程序的执行状态。
- 无溢出问题:由于JVM规范定义了字节码指令的长度是固定的,因此PC寄存器的值不会超出其表示范围,不会出现传统物理计算机中的溢出问题。
- 异常安全:在Java中,如果发生异常(如
OutOfMemoryError
),JVM会确保异常处理代码能够正确地恢复到异常发生时的程序状态,这包括了正确地保存和恢复PC寄存器的值。
PC寄存器常见问题
- 使用PC寄存器存储字节码指令地址有什么用呢?
- 为什么使用PC寄存器记录当前线程的执行地址呢?
答:
指令地址
可以获取当前执行代码的位置,下次执行直接从从指令地址
开始
PC寄存器
的特点中有 线程私有 的特点,因此使用PC寄存器进行记录,不同线程切换可以保证执行的都是自己的代码。
CPU时间片
CPU时间片有以下概念:
- 并行:多个线程同时执行
- 串行:多个线程排队执行
- 并发:多个线程快速切换,达到类似"并行"的效果
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 zxb
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果