根据《Java虚拟机规范》,JVM 的运行时数据区(Runtime Data Area)主要分为 5 个核心部分。 为了更好地理解,我们通常按照 “是否被所有线程共享” 将它们分为两大类:线程私有区域 和 线程共享区域。 --- 一、 线程私有区域(生命周期与线程相同) 这部分内存区域伴随线程的创建而生,线程的销毁而灭,相互之间互不干扰。 1. 程序计数器(Program Counter Register) 作用:可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令(分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖它完成)。 特点: 如果线程正在执行一个 Java 方法,它记录的是正在执行的虚拟机字节码指令的地址。 如果正在执行的是 Native 方法,它的值为空(Undefined)。 异常:这是整个 JVM 内存规范中 唯一一个没有规定任何 (OOM) 的区域。 2. Java 虚拟机栈(Java Virtual Machine Stack) 作用:描述 Java 方法执行的内存模型。每个方法在执行...