Java中JDK、JRE、JVM三者之间的关系
想了解Java中JDK、JRE、JVM这三个核心概念的关系,这是学习Java的基础知识点,我会用通俗易懂的方式帮你理清它们的层级和依赖关系。
先搞懂每个概念的核心作用
先逐个明确三者的定义和功能,再看它们的包含关系,这样理解会更清晰:
1. JVM (Java Virtual Machine - Java虚拟机)
- 核心作用:是Java实现“一次编写,到处运行”的核心。它负责将编译后的字节码(.class文件)解释/编译成对应操作系统能执行的机器码。
- 通俗比喻:相当于一个“翻译官”,把Java通用的字节码翻译成Windows、Mac、Linux等不同系统能听懂的语言。
- 特点:不同操作系统有不同版本的JVM,但都遵循统一的字节码规范,所以同一份字节码能在任何有JVM的系统上运行。
2. JRE (Java Runtime Environment - Java运行时环境)
- 核心作用:是运行Java程序的最小环境,包含了运行Java程序所需的所有组件。
- 组成:
JVM + Java核心类库(如java.lang、java.util等) + 运行时必要的配置文件。 - 通俗比喻:相当于运行Java程序的“基础操作系统”,只有安装了JRE,你的电脑才能执行Java程序,但无法编写和编译Java代码。
- 适用场景:如果你只需要运行别人写好的Java程序(比如jar包、Java桌面应用),安装JRE就足够了。
3. JDK (Java Development Kit - Java开发工具包)
- 核心作用:是用于开发、编译、调试Java程序的完整工具包,面向Java开发者。
- 组成:
JRE + 开发工具(javac编译器、java运行工具、javadoc文档生成工具、jdb调试器等)。 - 通俗比喻:相当于“开发+运行”的全套工具箱,包含了写代码、编译代码、运行代码的所有工具。
- 适用场景:如果你要写Java代码、编译项目、调试程序,必须安装JDK(安装JDK后无需单独装JRE,因为JDK已包含)。
三者的层级关系(从大到小)
用一张简单的层级图就能看明白:
graph TD
A[JDK] --> B[JRE]
B[JRE] --> C[JVM]
A[JDK] --> D[开发工具javac/javadoc等]
B[JRE] --> E[Java核心类库]
- 包含关系:JDK ⊃ JRE ⊃ JVM(JDK包含JRE,JRE包含JVM)。
- 依赖关系:运行Java程序 → 依赖JRE → 最终依赖JVM;开发Java程序 → 依赖JDK → 间接依赖JRE和JVM。
举个实际例子帮你理解
- 你写了一段Java代码(HelloWorld.java):
- 用JDK中的
javac工具编译:javac HelloWorld.java→ 生成字节码文件HelloWorld.class; - 用JDK/JRE中的
java工具运行:java HelloWorld→ 底层由JVM将字节码翻译成系统指令执行,最终输出结果。
- 用JDK中的
- 如果你的电脑只装了JRE,无法执行
javac编译命令,但能执行java运行命令;如果只装了JVM,连java命令都无法执行(缺少核心类库)。
总结
- JVM:Java跨平台的核心,负责执行字节码,是“运行层”的核心;
- JRE:运行Java程序的最小环境,包含JVM和核心类库,面向“使用者”;
- JDK:开发Java程序的完整工具包,包含JRE和开发工具,面向“开发者”;
核心逻辑:开发用JDK,运行用JRE,跨平台靠JVM,且三者是层层包含的关系。
浙公网安备 33010602011771号