JVM(Java Virtual Machine,Java 虚拟机) 是 Java 技术体系的核心组件之一,负责运行 Java 字节码程序,实现 Java 的“一次编写,到处运行”特性。
✅ 一、JVM 的定义与作用
JVM 是一种 虚拟计算机,它模拟了计算机的硬件与操作系统环境,能够加载、验证、执行 Java 字节码文件(.class)。
它的主要作用包括:
-
加载字节码(ClassLoader)
-
字节码验证
-
内存管理(垃圾回收)
-
执行字节码(解释执行或即时编译)
-
提供运行时的线程调度、异常处理、安全机制等
✅ 二、JVM 的整体结构
JVM 主要包含以下核心组件:
1. 类加载器(Class Loader)
-
负责将
.class
文件加载到 JVM 中。 -
包括 启动类加载器、扩展类加载器、应用类加载器。
-
支持双亲委派模型。
2. 运行时数据区(Runtime Data Area)
JVM 会在运行时为每个线程或整个程序分配一定的内存结构,主要包括:
区域 | 线程私有/共享 | 作用 |
---|---|---|
程序计数器(PC) | 私有 | 记录当前线程执行的字节码行号 |
虚拟机栈(VM Stack) | 私有 | 存储方法调用过程中的局部变量、操作数栈、返回地址等 |
本地方法栈(Native Stack) | 私有 | 调用 native 方法时使用(如 C 函数) |
堆(Heap) | 共享 | 存储对象实例,是 GC 的主要区域 |
方法区(Metaspace) | 共享 | 存储类的元信息、静态变量、常量池等(JDK8 开始叫 Metaspace) |
3. 执行引擎(Execution Engine)
-
解释器(Interpreter):逐行解释执行字节码。
-
JIT 编译器(Just-In-Time):热点代码动态编译为机器码,提升执行效率。
-
垃圾回收器(GC):自动回收无用对象内存。
4. 本地方法接口(JNI)
-
Java 代码调用非 Java(如 C/C++)的本地代码接口。
5. 本地库(Native Libraries)
-
JVM 所依赖的本地系统级库(如 C 库、动态链接库)。
✅ 三、JVM 与 JDK/JRE 的关系
JDK = JRE + 开发工具(javac、javadoc 等)
JRE = JVM + Java 核心类库(rt.jar 等)
-
JDK:开发 Java 程序所需的完整工具包。
-
JRE:只包含 JVM 和类库,用于运行 Java 程序。
-
JVM:真正执行 Java 字节码的引擎。
✅ 四、JVM 的跨平台机制
Java 之所以具备 跨平台能力,关键在于:
-
Java 源码编译成 平台无关的字节码(.class 文件)
-
各平台安装自己的 JVM 实现(如 HotSpot、OpenJ9)
-
JVM 在不同平台下解析字节码并映射到底层操作系统
✅ 五、主流 JVM 实现
实现 | 说明 |
---|---|
HotSpot | Oracle JDK 默认,性能优越,使用最广 |
OpenJ9 | IBM 开源的高性能 JVM |
GraalVM | 高性能多语言支持的 JVM |
Zing/Zulu | 商业级 JVM,适合低延迟场景 |
✅ 六、JVM 面试/实际工作常见知识点
-
类加载机制与双亲委派模型
-
JVM 内存模型与垃圾回收(G1、CMS、ZGC)
-
OOM 异常类型与排查(堆溢出、栈溢出等)
-
JMM(Java Memory Model,内存模型)与可见性/有序性
-
JVM 参数调优(如
-Xmx
,-XX:+UseG1GC
) -
JVM 性能监控工具(jmap、jstack、jconsole、VisualVM 等)
✅ 七、总结
维度 | 描述 |
---|---|
本质 | Java 字节码的执行引擎 |
作用 | 加载类、内存管理、执行代码、垃圾回收 |
核心模块 | 类加载器、运行时数据区、执行引擎、JNI |
特性 | 跨平台、自动内存管理、安全沙箱 |
重要 | Java 性能调优、内存排障、并发分析的核心基础 |
如需继续深入学习 JVM 内存结构、GC 原理、调优参数、类加载器或字节码分析等内容,可以继续提问,我可按模块系统性讲解。