JDK 与 JRE:你真的了解它们的区别吗?
在 Java 开发的世界里,我们经常会听到 JDK(Java Development Kit) 和 JRE(Java Runtime Environment) 这两个名词。很多初学者甚至部分开发者,对它们的区别和联系并不完全清楚。今天,我们就用通俗易懂的方式,一起来搞懂 JDK 和 JRE,并看看 Java 版本的演进带来了哪些变化。
1. JDK 和 JRE 到底是什么?
JDK:完整的 Java 开发工具包
JDK 是 Java 开发人员必备的工具包,包含了开发和运行 Java 程序所需的一切组件。其中包括:
简单来说,JDK = JRE + 开发工具,是 Java 开发的“全家桶”。
JRE:只负责运行 Java 程序
JRE 是 Java 运行环境,它本身不能用于开发 Java 程序,只是负责让 Java 应用能跑起来。JRE 主要包含两部分:
- JVM(Java Virtual Machine):即 Java 虚拟机,负责执行 Java 字节码,让 Java 代码可以跨平台运行。
- Java 标准类库(Class Library):提供各种常用的 API,比如 I/O 操作、网络通信、数据结构等。
总结:
- 如果你只是想运行 Java 程序(比如玩一个 Java 写的游戏),只需要 JRE。
- 如果你要开发 Java 程序(写代码、编译、调试),就需要安装 JDK。
2. 为什么 JDK 9 之后不再需要 JRE 了?
在早期的 Java 版本中,JDK 和 JRE 是两个相对独立的概念。但从 JDK 9 开始,Java 引入了模块化系统(Jigsaw 项目),改变了 JDK 的结构,使得 JRE 和 JDK 的界限变得模糊。主要有以下几个变化:
(1)JDK 9:模块化系统
JDK 9 采用 模块化(Modules) 设计,将整个 JDK 重新组织成了 94 个模块。开发者可以按需选择所需的模块,而不必安装完整的 JDK。
(2)jlink
工具:自定义 Java 运行时
Java 9 还引入了 jlink
工具,它可以根据应用程序的需求,创建一个精简版的 Java 运行时环境,仅包含必要的模块。这带来的好处包括:
- 更小的体积:不用再安装冗余的 JRE。
- 更高的安全性:减少了攻击面,降低潜在的安全风险。
- 更适合现代开发:在微服务、容器化和云原生环境下,更轻量的 Java 运行时能提高部署效率。
(3)JDK 11 之后,Oracle 不再提供单独的 JRE
从 JDK 11 开始,Oracle 官方不再发布单独的 JRE 下载,而是鼓励开发者使用 jlink
来创建适用于自己应用的 Java 运行时。
3. JDK 9+ 的优势:为什么要拥抱模块化?
模块化系统给 Java 带来了很多好处,尤其是对于现代软件架构,比如:
- 微服务架构:可以为每个微服务定制一个小型的 Java 运行环境,而不是让所有服务都依赖一个庞大的 JDK。
- 容器化和云原生开发:轻量级的 Java 运行时可以减少 Docker 镜像大小,提高部署效率。
- 增强安全性:减少未使用的 API 依赖,降低潜在的安全风险。
4. 总结:JDK 和 JRE 你应该怎么选?
需求 | 选择 |
---|---|
只是运行 Java 应用 | 以前:JRE(JDK 11 之后建议使用 jlink 生成的自定义运行时) |
开发 Java 应用 | JDK(包含所有开发工具) |
优化 Java 运行环境 | 使用 jlink 生成最小化 Java 运行时 |
从 JDK 9 之后,JRE 已经逐渐被模块化的 jlink
方案取代,而 JDK 仍然是开发者不可或缺的工具。