Skip to content

JVM/JRE/JDK 区别

初学 Java 时,经常被 JVM、JRE、JDK 搞得晕头转向。开发环境装的是哪个?生产环境又该装哪个?理解这三个概念,才能正确配置开发环境。

三者关系

┌─────────────────────────────────────────────────────────────┐
│                           JDK                               │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                     JRE                               │  │
│  │  ┌─────────────────────────────────────────────────┐  │  │
│  │  │                    JVM                         │  │  │
│  │  └─────────────────────────────────────────────────┘  │  │
│  │  ┌─────────────────────────────────────────────────┐  │  │
│  │  │              Java 类库 (API)                     │  │  │
│  │  └─────────────────────────────────────────────────┘  │  │
│  └───────────────────────────────────────────────────────┘  │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                   开发工具                             │  │
│  │            javac / jar / javadoc 等                   │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

快速对比

对比项JVMJREJDK
定义Java 虚拟机Java 运行时环境Java 开发工具包
功能运行字节码运行 Java 程序开发 Java 程序
包含 JVM✅ 核心
包含类库
包含编译器

JVM

Java 虚拟机,是 Java 程序运行的抽象环境。核心组件包括类加载器(加载 .class 文件到内存)、运行时数据区(管理内存)、执行引擎(解释执行或 JIT 编译)、本地接口(调用本地方法)。

源代码(.java) → javac 编译 → 字节码(.class) → JVM 执行 → 本地机器码

JVM 是跨平台的关键、自动垃圾回收的基础、安全机制的保障。

JRE

Java 运行时环境,包含 JVM 和 Java 类库(java.langjava.util 等核心 API)。

用户运行 Java 程序,只需要 JRE。

JDK

Java 开发工具包,包含 JRE + 开发工具(javac 编译器、jar 打包工具、javadoc 文档生成器、jdb 调试器)。

开发者编写 Java 程序,需要 JDK。

使用场景

场景安装内容原因
Java 开发者JDK需要编译、调试
普通用户运行程序JRE只需要运行
生产服务器JRE 或精简 JDK更小、更安全
构建服务器JDK需要编译打包

一句话总结

JDK = JRE + 开发工具
JRE = JVM + 类库
JVM = 执行字节码

后续可阅读:Java 程序运行机制编译型 vs 解释型跨平台原理

基于 VitePress 构建