JDK、JRE、JVM 是层层包含关系:JDK ⊃ JRE ⊃ JVM;JVM 是执行字节码的虚拟机,依赖类库;JRE 包含 JVM 与核心类库,供运行 Java 程序;JDK 在 JRE 基础上增加开发工具,面向开发者。

JDK、JRE、JVM 是 Java 技术栈中最基础又最容易混淆的三个概念。简单说:JVM 是执行字节码的“引擎”,JRE 是让 Java 程序跑起来的“最小运行套装”,JDK 是给开发者用的“全套开发工具箱”。三者是层层包含的关系,不是并列选项。
JVM:只认 .class 文件的虚拟计算机
JVM(Java Virtual Machine)是一个规范化的软件层,它不直接运行 .java 源文件,也不处理编译逻辑,只负责加载和执行已编译好的 .class 字节码文件。它通过解释或即时编译(JIT)把字节码转成当前操作系统能识别的机器指令。
- 每个平台(Windows/macOS/Linux)都有对应版本的 JVM 实现,这是 Java “一次编译,到处运行” 的核心支撑
- JVM 自身不带类库,运行时必须依赖 rt.jar 等核心类(如 java.lang.Object、java.util.ArrayList),否则会报 NoClassDefFoundError
- 它的内存结构包括方法区、堆、虚拟机栈、程序计数器、本地方法栈,GC 主要作用于堆区域
JRE:运行 Java 程序所需的最小环境
JRE(Java Runtime Environment)= JVM + 核心类库(如 java.*、javax.* 包)+ 运行支持文件(如 java.exe 启动器)。它面向的是“使用者”,不是开发者。
- 装了 JRE 就能双击运行 .jar 文件,或启动 Tomcat、Eclipse 等基于 Java 的应用
- JRE 不含 javac、javadoc、jdb 等工具,无法把 .java 编译成 .class
- 一台电脑可以同时装多个 JRE(比如 JDK 自带一个,独立安装另一个),不同 Java 应用可指定不同 JRE 运行
JDK:专为开发者准备的完整工具包
JDK(Java Development Kit)= JRE + 开发工具集 + 开发专用类库(如 tools.jar)。它是写代码、编译、调试、打包、生成文档的“一站式装备”。
- 关键工具包括:javac(编译器)、java(启动器,调用 JRE 运行)、jdb(命令行调试器)、javadoc(生成 API 文档)、javap(反编译查看字节码)
- 安装 JDK 时,默认会附带一个 JRE(通常放在 jdk/jre 目录下),供 JDK 自身工具使用;也可额外安装独立 JRE 给其他程序用
- 现代 JDK(如 JDK 17+)已不再分发独立 JRE,官方推荐直接部署 JDK 并通过 jlink 构建自定义运行时镜像
关系图可简化为:JDK ⊃ JRE ⊃ JVM。没有 JVM,JRE 和 JDK 都无法运行 Java 字节码;没有 JRE,JVM 就缺少运行必需的类库;没有 JDK,你就只能运行别人写好的程序,没法自己写、编译、调试。










