【Java 基础(人话版)】JDK 与 JRE

JDK 与 JRE:你真的了解它们的区别吗?

在 Java 开发的世界里,我们经常会听到 JDK(Java Development Kit)JRE(Java Runtime Environment) 这两个名词。很多初学者甚至部分开发者,对它们的区别和联系并不完全清楚。今天,我们就用通俗易懂的方式,一起来搞懂 JDK 和 JRE,并看看 Java 版本的演进带来了哪些变化。


1. JDK 和 JRE 到底是什么?

JDK:完整的 Java 开发工具包

JDK 是 Java 开发人员必备的工具包,包含了开发和运行 Java 程序所需的一切组件。其中包括:

  • JRE(Java 运行环境):保证 Java 程序可以正常运行。
  • 编译器 javac:将 Java 源代码(.java 文件)转换成字节码(.class 文件)。
  • 开发工具
    • javadoc:自动生成 Java API 文档的工具。
    • jdb:调试 Java 程序的调试器。
    • jconsole:用于监控 Java 进程的工具。
    • javap:反编译 .class 文件的工具。

简单来说,JDK = JRE + 开发工具,是 Java 开发的“全家桶”。

JRE:只负责运行 Java 程序

JRE 是 Java 运行环境,它本身不能用于开发 Java 程序,只是负责让 Java 应用能跑起来。JRE 主要包含两部分:

  1. JVM(Java Virtual Machine):即 Java 虚拟机,负责执行 Java 字节码,让 Java 代码可以跨平台运行。
  2. 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 仍然是开发者不可或缺的工具。

你可能感兴趣的:(java,开发语言,jdk,jre,后端,软件开发)