JDK vs JRE:到底有什么本质区别?99% 的人都答不上来

学 Java 时,我们经常会被两个概念绕晕:JDKJRE

很多人背下来一句话:

"JDK = JRE + 开发工具"。

但当被问到------JRE 到底是什么?JDK 比 JRE 多了哪些东西?它们在运行程序时的角色有什么不同?

多数人还是一脸懵。

本文将带你从 结构组成 → 工作原理 → 实际场景 三个层面彻底搞清楚它们的本质区别。


1. JDK 与 JRE 的官方定义

  • JRE(Java Runtime Environment) :Java 运行环境,包含运行 Java 程序所需的核心类库(Core Libraries)和 JVM。
  • JDK(Java Development Kit) :Java 开发工具包,包含 JRE 以及 编译、调试、打包等开发工具。

一句话:

JRE 负责"运行",JDK 负责"开发 + 运行"。


2. 结构对比

用一个结构图来看更直观:

nginx 复制代码
JDK
 ├── JRE
 │    ├── JVM(Java Virtual Machine)
 │    ├── 核心类库(rt.jar、charsets.jar 等)
 │    └── 运行时支持文件
 ├── 开发工具(javac、javadoc、jar、jdb 等)
 └── 其他辅助工具(jconsole、jvisualvm 等)

📌 关键点:

  • JVM:负责将字节码解释/编译为机器码并执行。
  • 核心类库 :包括 java.langjava.utiljava.io 等,Java 程序运行离不开它们。
  • 开发工具javac(编译器)、jar(打包)、javadoc(文档生成)等只在开发阶段使用。

3. 工作原理上的区别

假设你有一个 Java 源文件:

java 复制代码
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello Java");
    }
}

JDK 完成的流程:

  1. 编译阶段

    • 使用 javac Hello.java → 编译成 Hello.class(字节码文件)。
    • 需要 javac(属于 JDK,JRE 没有)。
  2. 运行阶段

    • 使用 java Hello → JVM 加载并执行字节码。
    • 需要 JVM + 核心类库(属于 JRE)。

如果你只有 JRE

  • 你可以运行 java Hello(前提是 Hello.class 已存在)。
  • 但你不能编译 Hello.java(因为缺少 javac)。

换句话说:

JDK = 可以开发 + 运行
JRE = 只能运行


4. 类比理解

我们可以用一个生活类比来理解:

  • JRE = 只有微波炉和食材的厨房 → 你可以加热和吃饭(运行程序)。
  • JDK = 厨房 + 菜刀、锅铲、调料 → 你既能做饭(编译程序),也能吃饭(运行程序)。

5. 在不同场景下的选择

场景 推荐安装
开发 Java 应用 JDK(包含所有开发工具和运行环境)
部署到服务器,只运行已编译程序 JRE(体积小、运行环境足够)
使用框架构建、调试、编译 JDK
纯运行环境(嵌入式、客户端运行) JRE

6. 自 JDK 11 之后的变化

Java 11 开始,Oracle 不再单独提供 JRE 下载包 ,只有 JDK 包。

如果你只需要运行 Java 程序,可以:

  • 安装 JDK,但只用里面的 java 命令。
  • 或者自己定制精简版运行时(用 jlink 生成)。

这意味着:

在新版本 Java 中,JDK 已经完全覆盖了 JRE 的功能,JRE 单独存在的意义在减少。


7. 总结记忆

对比点 JDK JRE
含 JVM
核心类库
编译器(javac)
开发工具
用途 开发 + 运行 运行

一句话记忆:

JRE 是运行时,JDK 是开发套件(包含 JRE)。


核心 takeaway

  • 运行程序 → 需要 JRE
  • 编写程序 → 需要 JDK(因为要编译)
  • 新版 JDK 自带运行功能,不必额外装 JRE。
相关推荐
爱泡脚的鸡腿几秒前
Node.js 拓展
前端·后端
蚂蚁背大象1 小时前
Rust 所有权系统是为了解决什么问题
后端·rust
子玖3 小时前
go实现通过ip解析城市
后端·go
Java不加班3 小时前
Java 后端定时任务实现方案与工程化指南
后端
心在飞扬3 小时前
RAG 进阶检索学习笔记
后端
Moment3 小时前
想要长期陪伴你的助理?先从部署一个 OpenClaw 开始 😍😍😍
前端·后端·github
Das1_3 小时前
【Golang 数据结构】Slice 底层机制
后端·go
得物技术3 小时前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
古时的风筝3 小时前
花10 分钟时间,把终端改造成“生产力武器”:Ghostty + Yazi + Lazygit 配置全流程
前端·后端·程序员