如题,是不是觉得很不可思议 ?在写这篇文章的时候,我也觉得作为Java程序员,jdk、jre、jvm之间的关系不应该不清楚,然而,事实是很多人在工作几年后,都不清楚这三者之间的关系。今天就让我们一起来梳理一下他们之间的关系。
JDK、JRE 和 JVM 是 Java 技术的三个核心组件,它们之间是层层包含的关系。理解它们的关系对Java开发和部署至关重要:
1. JDK(Java Development Kit,Java开发工具包)
-
作用:为开发Java程序提供完整工具链。
-
包含内容:
-
编译器
javac -
调试器
jdb -
打包工具
jar -
文档生成器
javadoc -
其他实用工具(如
javap,jconsole) -
JRE(含JVM和核心库)
-
开发工具:
-
-
典型用户:Java开发者(需要编写、编译、调试代码)。
2. JRE(Java Runtime Environment,Java运行环境)
-
作用:为运行Java程序提供环境(不包含开发工具)。
-
包含内容:
- JVM
- Java核心类库(如
java.lang,java.util,java.io等) - 其他支持文件(如属性配置文件、字体等)
-
典型用户: 只需要运行Java程序的用户(如使用Java开发的桌面应用或Web应用的用户)。 不包含编译器(
javac)、调试器等开发工具。
3. JVM(Java Virtual Machine,Java虚拟机)
-
作用:执行编译后的Java字节码(
.class文件)。提供跨平台能力(“Write Once, Run Anywhere”)。 -
核心功能:
- 加载字节码
- 验证代码安全性
- 解释/编译字节码为机器码(JIT编译器)
- 内存管理(垃圾回收)
-
关键点: JVM是运行时环境,依赖不同操作系统(Windows/Linux/macOS)有不同实现。 开发者无法直接下载独立JVM,它作为JRE或JDK的一部分存在。
✅ 三者的层级关系

📌 关键总结
| 组件 | 用途 | 是否包含开发工具 | 是否包含JVM |
|---|---|---|---|
| JDK | 开发+运行 | ✅ 包含(如javac) | ✅ |
| JRE | 仅运行 | ❌ 不包含 | ✅ |
| JVM | 执行字节码 | ❌ 不包含 | ❌(JVM自身) |
⚠️ 实际应用场景
- 开发环境:需安装 JDK(例如编写代码并执行
javac HelloWorld.java)。 - 生产环境:只需 JRE 即可运行Java程序(例如用户运行
java HelloWorld)。 - 现代变化:从 Java 9 开始,官方不再提供独立的JRE下载(因模块化系统引入),而是通过JDK生成定制化JRE(使用
jlink工具)。
一句话概括
官方不再提供独立的JRE下载(因模块化系统引入),而是通过JDK生成定制化JRE(使用 jlink 工具)。
一句话概括
**开发者用JDK写代码,用户用JRE跑程序,JVM在底层默默执行字节码。**没有JVM,Java无法跨平台;没有JRE,JVM无法独立工作;没有JDK,开发者无从下手。
606

被折叠的 条评论
为什么被折叠?



