JVM架构全景图:五大核心组件详解
引言 为什么要学习这个主题? 在前两篇文章中,我们知道了Java程序如何运行,以及JVM的本质。但JVM内部到底是怎么工作的? 想象一下: 一个.class文件是如何被加载到JVM中的? 对象和变量存储在哪里? 字节码是如何被"翻译"成机器码的? 理解JVM的架构,就像理解一台计算机的组成(CPU、内存、硬盘)一样重要。这是后续学习类加载、内存管理、GC调优的基础。 你将学到什么? ✅ JVM的整体架构图 ✅ 五大核心组件的职责 ✅ 各组件如何协作运行Java程序 ✅ JVM的完整执行流程 一、JVM架构全景图 1.1 整体架构 ┌─────────────────────────────────────────────────────────────┐ │ Java应用程序 │ │ (.java → .class) │ └──────────────────────┬──────────────────────────────────────┘ │ 字节码 ↓ ┌─────────────────────────────────────────────────────────────┐ │ JVM(Java虚拟机) │ │ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ 1️⃣ 类加载子系统 (Class Loader Subsystem) │ │ │ │ - 加载 (Loading) │ │ │ │ - 链接 (Linking): 验证、准备、解析 │ │ │ │ - 初始化 (Initialization) │ │ │ └────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ 2️⃣ 运行时数据区 (Runtime Data Areas) │ │ │ │ │ │ │ │ 【线程共享】 【线程私有】 │ │ │ │ - 堆 (Heap) - 程序计数器 (PC Register)│ │ │ │ - 方法区 (Method Area) - 虚拟机栈 (VM Stack) │ │ │ │ - 本地方法栈 (Native Stack)│ │ │ └────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ 3️⃣ 执行引擎 (Execution Engine) │ │ │ │ - 解释器 (Interpreter) │ │ │ │ - JIT编译器 (Just-In-Time Compiler) │ │ │ │ - 垃圾收集器 (Garbage Collector) │ │ │ └────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ 4️⃣ 本地接口 (Native Interface - JNI) │ │ │ └────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ 5️⃣ 本地方法库 (Native Method Libraries) │ │ │ └────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 操作系统 & 硬件 │ └─────────────────────────────────────────────────────────────┘ 1.2 核心组件概览 组件 作用 类比 类加载子系统 加载、链接、初始化类 快递员(把包裹送到仓库) 运行时数据区 存储数据(对象、变量、代码) 内存/仓库 执行引擎 执行字节码 CPU(执行指令) 本地接口 调用操作系统API 操作系统接口 垃圾收集器 自动回收无用对象 清洁工(清理垃圾) 二、类加载子系统(Class Loader Subsystem) 2.1 职责 负责将.class文件加载到JVM内存中,并准备好供使用。 ...