一文搞懂 JDK、JRE、JVM:Java 程序运行的底层原理
在 Java 学习和开发中,你经常会听到三个词:
JDK、JRE、JVM
它们看起来很相似,但实际上有本质区别。理解它们不仅能让你更好地理解 Java 的运行原理,也有助于面试回答类似问题。
本文将从以下几个方面系统讲解:
- JDK、JRE、JVM 各自的定义与作用
- 三者的关系
- Java 代码从编写到运行的完整流程
- 面试常见问题总结
一、JVM(Java Virtual Machine)
1.1 定义
JVM,全称 Java 虚拟机 (Java Virtual Machine),是 Java 程序运行的 核心执行环境。
它是 Java "一次编写,到处运行"的关键所在。
简单理解:
text
JVM = Java程序的执行引擎
1.2 JVM 的作用
JVM 的核心职责包括:
- 加载类(Class Loader)
- 执行字节码(Interpreter / JIT 编译器)
- 内存管理与垃圾回收(Heap / Stack / Method Area)
- 提供运行时数据区(Program Counter / 栈 / 堆 / 方法区等)
- 异常处理与安全管理
总结一句话:
JVM 就是 Java 程序运行时的虚拟计算机。
1.3 JVM 特点
- 与平台无关:不同系统只需安装对应 JVM
- 执行字节码:
*.class文件,而非直接执行源代码 - 提供垃圾回收机制:自动管理内存
- 支持多语言:不仅可以运行 Java,也可运行 Kotlin、Scala 等编译到 JVM 字节码的语言
二、JRE(Java Runtime Environment)
2.1 定义
JRE,全称 Java 运行环境 (Java Runtime Environment),是 运行 Java 程序所需的软件环境。
它包含了:
- JVM:执行引擎
- 核心类库 :如
java.lang.*、java.util.* - 其他运行所需资源:如 properties 文件等
换句话说:
text
JRE = JVM + Java 核心类库 + 配置文件
2.2 JRE 的作用
JRE 的主要作用:
- 提供 JVM 实现
- 提供 Java 标准库支持
- 让 Java 程序能够在不同系统上运行
注意:
- JRE 不能用于开发,因为它没有编译器和调试工具
- 只能用来 运行已编译的 Java 程序
三、JDK(Java Development Kit)
3.1 定义
JDK,全称 Java 开发工具包 (Java Development Kit),是 Java 开发人员必须安装的工具包。
它包含:
- JRE(即运行环境)
- Java 编译器
javac - 调试工具 (如
jdb) - 文档工具 (如
javadoc) - 其他开发工具 (如
jar,javap等)
总结:
text
JDK = JRE + 开发工具
3.2 JDK 的作用
JDK 是开发者用来:
- 编写 Java 代码
- 编译成字节码
- 打包和调试程序
开发流程:
text
编写源代码 -> 使用 javac 编译 -> 生成字节码 -> 用 JRE / JVM 执行
四、JDK、JRE、JVM 的关系
用图示理解最直观:
┌─────────────┐
│ JDK │
│ ┌─────────┐ │
│ │ JRE │ │
│ │ ┌─────┐ │ │
│ │ │ JVM │ │ │
│ │ └─────┘ │ │
│ └─────────┘ │
└─────────────┘
文字解释:
- JVM:执行字节码
- JRE:提供 JVM 和核心类库
- JDK:提供 JRE + 开发工具
五、Java 程序从编写到运行的全过程
理解 JDK、JRE、JVM 的最好方式就是看 程序执行流程。
- 编写源代码 (
HelloWorld.java) - 编译源代码 (JDK
javac工具)- 生成字节码文件
HelloWorld.class
- 生成字节码文件
- 运行字节码 (JRE 中的 JVM)
- JVM 加载类
- JVM 执行字节码
- JVM 调用垃圾回收、异常处理等
- 输出结果
流程示意:
HelloWorld.java
│
▼ javac
HelloWorld.class
│
▼ java (JRE/JVM)
程序运行
六、面试常考点总结
1. JVM、JRE、JDK 区别
| 名称 | 含义 | 作用 | 面试易考点 |
|---|---|---|---|
| JVM | Java 虚拟机 | 执行字节码,提供内存管理 | 核心执行环境,垃圾回收,跨平台 |
| JRE | Java 运行环境 | 提供 JVM + 核心类库,运行 Java 程序 | 不能开发,只能运行 |
| JDK | Java 开发工具包 | 提供 JRE + 编译器 + 开发工具 | 开发必备,包含 javac、jar、javadoc 等 |
2. JVM 为什么能实现"一次编写,到处运行"?
- Java 源代码编译成字节码
- 字节码由 JVM 执行
- 不同操作系统有不同的 JVM
- 所以程序无需修改即可跨平台运行
3. JDK 是否必须安装?
- 开发必需安装 JDK
- 仅运行程序可以安装 JRE
- 现代 JDK(JDK 11+)中 JRE 已被整合在 JDK 中,单独安装 JRE 已不常见
4. JVM 内部核心组件
面试可能问:
- 类加载器(ClassLoader)
- 执行引擎(Interpreter + JIT)
- 内存管理(Heap / Stack / Method Area)
- 垃圾回收机制
七、总结
理解 JDK、JRE、JVM 的核心要点:
- JVM 是执行环境
- JRE 提供 JVM + 核心类库
- JDK 提供开发工具 + JRE
完整运行流程:
源代码 -> 编译 -> 字节码 -> JVM 执行 -> 程序运行