Oracle JDK 全面介绍 – wiki基地


Oracle JDK 全面介绍:Java 开发者的核心工具与生态基石

Java,作为全球最流行、应用最广泛的编程语言之一,其生态系统的核心是 Java Development Kit(JDK)。在众多的 JDK 发行版本中,Oracle JDK 无疑是历史上最重要、影响最深远的一个。它不仅是 Java 平台的“参考实现”(Reference Implementation),长期以来也是大多数开发者首选的开发工具。然而,随着时间的推移和许可模式的改变,Oracle JDK 的地位和使用方式也发生了显著变化。

本文将对 Oracle JDK 进行一次全面的深入剖析,从其历史渊源、核心组成、关键特性,到备受关注的许可模式变迁,以及它在现代 Java 生态中的定位,帮助读者全面理解这个强大的开发工具。

1. 什么是 JDK?为什么要了解 Oracle JDK?

在深入探讨 Oracle JDK 之前,我们首先需要理解 JDK 是什么。JDK 全称为 Java Development Kit,即 Java 开发工具包。它是用于开发 Java 应用程序和 Applet 的软件开发环境。一个典型的 JDK 包含:

  1. Java Runtime Environment (JRE):Java 运行时环境,包含 Java 虚拟机(JVM)、核心类库和支持文件。它是运行 Java 程序所需的一切。
  2. 开发工具:包括编译器 (javac)、打包工具 (jar)、文档生成工具 (javadoc)、调试工具 (jdb) 等。
  3. API 类库:一套标准的应用程序接口 (API),提供丰富的预定义类和接口,开发者可以直接调用这些类库来完成各种任务。

简单来说,如果你想写 Java 程序,你需要 JDK;如果你只是想运行 Java 程序,你只需要 JRE(不过现在很多 JDK 发行版包含了完整的 JRE,甚至 JRE 这个概念在模块化后的 Java 版本中被淡化,开发者通常只下载 JDK)。

那么,为什么要特别了解 Oracle JDK 呢?原因在于:

  • 历史地位:Oracle JDK 是 Java 平台的原始创建者 Sun Microsystems (后被 Oracle 收购) 发布的官方 JDK。长期以来,它被认为是 Java 标准的“参考实现”,是新版本 Java 特性的第一个可用实现。
  • 广泛使用:尽管现在有许多其他的 JDK 发行版(如 OpenJDK 的各种下游版本),Oracle JDK 在历史上和目前仍然被大量企业和开发者使用,尤其是在遗留系统或需要商业支持的场景。
  • 许可模式:Oracle JDK 的许可模式经历了重要的变化,这直接影响了其在商业生产环境中的免费使用权限。理解其许可条款对于合规使用至关重要。

2. Oracle JDK 的历史:从 Sun 到 Oracle 的传承与演变

Oracle JDK 的历史与 Java 语言本身的历史紧密相连。

Java 语言于 1995 年由 Sun Microsystems 公司发布。Sun Microsystems 开发并维护了 Java 的第一个 JDK 版本,奠定了 Java 开发的基础。在 Sun 时代,JDK 通常被称为 Sun JDK。

2010 年,Oracle 公司完成了对 Sun Microsystems 的收购。自此,Java 平台的所有权和开发权转移到了 Oracle 手中。Sun JDK 也随之更名为 Oracle JDK。

在 Oracle 接管 Java 后,继续推动 Java 的发展,发布了重要的版本,如 Java 7、Java 8 等。Java 8 是一个里程碑式的版本,引入了 Lambda 表达式、Stream API 等重要特性,并因其长期支持(LTS)特性而在业界广泛流行,至今仍有大量应用基于 Java 8。

然而,随着 Java 版本的迭代加速(从 Java 9 开始改为每六个月发布一个新版本)以及 OpenJDK 的日益成熟,Oracle 开始调整其 Java 产品策略和许可模式。这是 Oracle JDK 历史上最关键的转折点之一。

  • Java 9 (2017):引入了模块化系统 (Project Jigsaw),极大地改变了 Java 的内部结构和部署方式。
  • Java 10 (2018):一些小型改进。
  • Java 11 (2018)重要的 LTS 版本,也是许可模式发生重大变化的第一个版本。 从 Java 11 及之后的版本开始,Oracle JDK 的许可协议不再允许在商业生产环境中免费使用,除非通过购买 Oracle Java SE Subscription 获得许可。
  • Java 17 (2021)另一个重要的 LTS 版本。 继续执行新的许可模式。
  • Java 21 (2023)最新的 LTS 版本。

这一历史变迁,尤其是许可模式的变化,深刻地影响了开发者和企业选择和使用 Oracle JDK 的方式。

3. Oracle JDK 的核心组成部分详解

Oracle JDK 是一个庞大而复杂的软件套装,其核心组成部分包括:

3.1 Java 虚拟机 (JVM) – HotSpot

JVM 是 Java 平台的核心,负责执行 Java 字节码。Oracle JDK 默认使用的 JVM 是 HotSpot。HotSpot JVM 是一个高性能的虚拟机,得益于其先进的即时编译器 (JIT Compiler)、垃圾收集器 (Garbage Collector) 和运行时优化技术。

  • JIT Compiler (即时编译器):HotSpot JVM 在程序运行时会将热点代码(经常执行的代码)编译成本地机器码,从而显著提高程序的执行速度。它包含了 C1 (Client Compiler) 和 C2 (Server Compiler) 两个编译器,可以根据应用类型(客户端或服务器)和启动性能/峰值性能的需求进行选择或自动切换。
  • Garbage Collector (垃圾收集器):HotSpot 提供了多种垃圾收集器,以适应不同的应用场景和性能需求,例如:
    • Serial GC:单线程收集器,适用于小型应用或单核处理器。
    • Parallel GC:吞吐量优先的收集器,适用于多核处理器,主要目标是最大化应用程序的吞吐量。
    • CMS (Concurrent Mark Sweep) GC:发时标记清除收集器,目标是降低垃圾收集时的停顿时间,但在 Java 9 中被标记为废弃,在 Java 14 中被移除。
    • G1 (Garbage-First) GC:设计用于处理大内存(多GB)的应用,目标是在可预测的停顿时间内达到高吞吐量。自 Java 9 起成为默认的垃圾收集器。
    • ZGC 和 Shenandoah GC:低延迟垃圾收集器,旨在实现非常短的停顿时间(通常在毫秒级),适用于对响应时间要求极高的应用。它们在较新的 Java 版本中得到支持和优化,其中 ZGC 是 Oracle JDK 中提供的。

HotSpot JVM 不断演进,引入新的优化技术和改进的垃圾收集器,是 Oracle JDK 性能强大的关键。

3.2 JRE (Java Runtime Environment)

JRE 包含了运行 Java 程序所需的所有组件,是 JDK 的一个子集。它包括 HotSpot JVM 和 Java 标准库(核心类库)。虽然在 Java 9 模块化之后,JRE 的独立安装包不再是主流,但其概念(运行时环境)仍然存在于 JDK 的安装目录中。

3.3 Java 标准库 (Java SE API)

这是 Java 平台的核心类库,包含了大量预定义的类和接口,提供了丰富的应用程序接口。开发者通过调用这些 API 来实现各种功能,而无需从头开始编写底层代码。这些类库覆盖了广泛的领域,包括:

  • 集合框架 (Collections Framework):如 ArrayList, HashMap, HashSet 等,用于存储和操作对象集合。
  • I/O (Input/Output):用于读写文件、网络通信等。
  • 网络 (Networking):用于创建网络连接、发送和接收数据。
  • 并发编程 (Concurrency):提供线程、锁、原子操作等工具,用于编写多线程和并行程序。
  • 日期和时间 API (Date and Time API):在 Java 8 中引入了新的 java.time 包,提供了更强大、易用的日期时间处理功能。
  • 反射 (Reflection):允许程序在运行时检查和操作类、方法、属性等信息。
  • 安全 (Security):提供了加密、认证、授权等安全相关的 API。
  • 数据库连接 (JDBC):Java Database Connectivity,用于连接和操作各种数据库。
  • XML 处理日志国际化等等。

这些标准库的稳定性和丰富性是 Java 平台长期成功的重要因素。

3.4 开发工具

Oracle JDK 附带了一系列命令行工具,这些工具是 Java 开发的核心辅助工具:

  • javac:Java 编译器。将 .java 源代码文件编译成 .class 字节码文件。
  • java:Java 启动器。运行 Java 应用程序。它启动 JVM 并加载执行指定的类或 JAR 文件。
  • jar:Java Archive 工具。用于将多个文件(通常是 .class 文件、资源文件等)打包成一个 .jar 文件,便于分发和部署。也可以用于创建可执行 JAR 文件。
  • javadoc:API 文档生成器。根据源代码中的特定注释(Javadoc 注释)生成 HTML 格式的 API 文档。
  • jdb:Java 调试器。一个简单的命令行调试工具,用于查找和修复 Java 程序中的错误。
  • jconsolejvisualvm:监控和故障排除工具。
    • jconsole (Java Monitoring and Management Console) 提供了一个图形界面,用于监控运行中的 Java 应用程序的性能(如内存使用、线程、类加载等)和管理 MBeans。
    • jvisualvm (VisualVM) 是一个更强大的可视化工具,集成了多种命令行工具的功能,可以监控、排除故障、以及分析 Java 应用程序,支持 CPU 分析、内存分析、线程分析等。
  • jcmd:统一的诊断命令工具。可以发送诊断命令请求到运行中的 JVM,执行各种任务,如生成线程 dump、堆 dump、类直方图、获取性能信息等。
  • jstat:JVM 统计监控工具。用于监控 JVM 的各种运行时统计信息,如 GC 活动、堆内存分配等。
  • jfr:Java Flight Recorder。一个低开销的事件记录框架,用于收集运行中 Java 应用程序的详细运行时信息,用于性能分析和故障排除。它最初是 Oracle JDK 的商业特性,但在 OpenJDK 11 中被开源。

这些工具共同构成了 Oracle JDK 强大的开发和诊断能力。

4. Oracle JDK 的关键特性与优势

Oracle JDK 作为官方发行版,具备诸多特性和优势:

  • 性能卓越:得益于高度优化的 HotSpot JVM,Oracle JDK 在吞吐量、启动速度和低延迟等方面通常表现出色。其即时编译器和多种高级垃圾收集器提供了强大的性能调优能力。
  • 稳定性与成熟度:作为历史最悠久、使用最广泛的 JDK,Oracle JDK 经历了数百万小时的测试和生产环境的检验,其稳定性和可靠性非常高。
  • 完整性:包含了 Java SE 规范的所有必需组件,并通过了技术兼容性工具包 (TCK) 的所有测试,确保完全符合 Java 标准。
  • 强大的开发和诊断工具:如前所述,Oracle JDK 提供了一整套功能强大的命令行和可视化工具,极大地便利了开发、调试、监控和性能分析工作。JFR 是一个特别有价值的工具,尤其在复杂的生产环境中。
  • 商业支持选项:Oracle 提供企业级的商业支持(Oracle Java SE Subscription),包括安全更新、错误修复、性能增强以及全天候的技术支持。这对于需要高可用性、安全性和合规性的企业级应用至关重要。
  • 最新特性实现:作为参考实现,Oracle JDK 通常是第一个或最早一批实现最新 Java SE 规范特性的 JDK。

5. Oracle JDK 的许可模式:历史性变迁与现状

Oracle JDK 的许可模式是近年来最受关注的话题之一,也是许多开发者和企业需要仔细权衡的地方。

5.1 旧许可模式 (适用于 Java 8u201/202 及更早版本)

对于 Java 8 的更新版本(如 8u201/202)及之前的版本(包括 Java 7 等),Oracle JDK 使用的是 Binary Code License (BCL)。这个许可证允许个人用户和开发者免费用于开发、测试和部署应用程序。然而,对于商业用途,尤其是将 Oracle JDK 集成到商业软件产品中进行分发,通常需要单独的许可协议和费用。但对于大多数企业内部使用 Java 8u201/202 及更早版本运行应用程序,BCL 通常被解释为允许免费使用。

5.2 新许可模式 (适用于 Java 11 及之后版本,以及 Java 8u211/212 及之后版本)

Java 11 发布以及 Java 8u211/212 更新开始,Oracle 引入了新的许可协议:Oracle Technology Network (OTN) License Agreement for Oracle Java SE

这个新的许可证的核心内容是:

  • 允许的免费使用场景:你可以免费使用 Oracle JDK 用于个人用途、开发、测试、原型制作、演示,以及内部业务运营(例如,运行你公司内部的 Java 应用,但不是作为你公司销售或提供给外部客户的商业产品的一部分,除非该商业产品是基于 Java SE Subscription 构建的)。
  • 需要付费的场景在商业生产环境中,如果你的使用不是上述免费场景之一,且与你的商业产品或服务相关联,通常需要购买 Oracle Java SE Subscription。例如,将 Oracle JDK 捆绑在你销售给客户的硬件或软件产品中,或者在云服务中使用 Oracle JDK 来运行面向客户的商业应用,通常需要付费。

简而言之,新的许可模式对“商业生产环境”的使用进行了更严格的限制。对于企业来说,如果你在生产环境运行基于 Oracle JDK 11 或更高版本(或 Java 8u211/212 及更高版本)的应用程序,并且这些应用是你的核心业务或服务的一部分,很可能需要付费订阅。

这种许可模式的变化导致许多企业和开发者转向了 OpenJDK 的其他免费发行版,如 Adoptium (Temurin)、Azul Zulu、Amazon Corretto、SAPMachine 等。

理解这个许可变化对于企业选择 JDK 版本和发行版至关重要,以避免潜在的合规风险。

6. Oracle JDK 与 OpenJDK 的关系与选择

Oracle JDK 和 OpenJDK 是密切相关的,但并非完全相同(尤其是考虑历史版本和许可)。

  • 关系:Oracle JDK 是基于 OpenJDK 的源代码构建的。Oracle 是 OpenJDK 项目的主要贡献者和领导者。可以将 OpenJDK 看作是 Java 标准的开源实现,而 Oracle JDK 是 Oracle 公司基于这个开源代码构建并发布的商业产品(尽管有免费使用条款)。
  • 历史差异:在 Java 11 之前,Oracle JDK 包含一些 OpenJDK 中没有的“专有”特性,例如更高级的垃圾收集器 (如 G1 在早期版本中)、Java Flight Recorder (JFR)、Java Mission Control (JMC) 以及一些性能增强。
  • 当前差异:从 Java 11 开始,Oracle 大力推动将这些专有特性开源到 OpenJDK 中(例如 JFR 和 ZGC),使得 Oracle JDK 和 OpenJDK 的功能集变得非常接近。当前 Oracle JDK 相较于 OpenJDK 主线版本的主要差异更多体现在品牌、安装程序、更新周期、以及最关键的——许可协议和商业支持。功能上,它们的核心部分几乎是一致的。
  • 许可差异:OpenJDK 通常采用 GPL v2 with Classpath Exception 许可证,这允许在商业环境中免费使用、修改和分发。这是与 Oracle JDK 新许可模式最大的区别。

如何选择?

  • 对于个人开发者和非商业用途:Oracle JDK 的新许可协议允许免费使用。同时,各种 OpenJDK 发行版也是完全免费的良好选择。
  • 对于企业内部应用(非面向客户的商业产品核心部分):Oracle JDK 在新的许可下也允许免费使用(“内部业务运营”)。然而,许多企业出于合规性和未来不确定性的考虑,更倾向于选择免费且开源的 OpenJDK 发行版。
  • 对于将 Java 集成到商业产品或服务中提供给客户:除非你的集成方式符合 Oracle JDK 的免费条款(较少见),否则你需要购买 Oracle Java SE Subscription。在这种情况下,你也可以考虑使用完全免费的 OpenJDK 发行版作为替代,这些发行版通常提供自己的商业支持选项(由 Azul, Red Hat, Amazon 等公司提供)。
  • 需要 Oracle 官方商业支持:如果你需要 Oracle 官方提供的 SLA 保障、安全补丁和技术支持,那么购买 Oracle Java SE Subscription 并使用 Oracle JDK 是唯一的选择。

许多企业已经迁移到 OpenJDK 发行版,但也有一些企业由于历史原因、遗留系统依赖、或需要 Oracle 官方支持而继续使用或选择 Oracle JDK (通过付费订阅)。

7. 如何获取和安装 Oracle JDK

要获取 Oracle JDK,你需要访问 Oracle 官方网站的 Java SE 下载页面:https://www.oracle.com/java/technologies/downloads/

下载过程通常需要接受 Oracle Technology Network (OTN) 许可协议。对于较新的版本(Java 11+,以及 Java 8u211+),你可能需要拥有一个 Oracle 账号并登录才能下载。这是 Oracle 为确保用户理解并遵守新的许可条款而采取的措施。

安装过程与普通软件安装类似,下载对应操作系统的安装包(Windows 的 .exe.msi,macOS 的 .dmg,Linux 的 .tar.gz 或包管理器),然后按照安装向导进行即可。安装完成后,通常需要配置系统的 PATH 环境变量,以便在任何位置通过命令行执行 javajavac 等命令。

8. Oracle JDK 的未来

Oracle 将继续作为 OpenJDK 项目的主要贡献者和领导者,推动 Java 语言和平台的发展。Oracle JDK 作为 Oracle 的商业 Java 产品,会持续与 OpenJDK 主线版本保持同步,并提供商业支持。

随着 OpenJDK 生态的日益繁荣和各种下游发行版的成熟,Oracle JDK 在免费使用领域的市场份额可能会受到挑战。然而,对于那些需要 Oracle 官方支持、对最新 Java 特性实现有早期需求、或者在遗留系统中深度依赖 Oracle JDK 某些特定行为的企业来说,Oracle JDK 及其付费订阅仍然是重要的选项。

Oracle 也越来越关注 Java 在云原生、微服务、人工智能等新兴领域的应用,Oracle JDK 和 GraalVM (一个更高级的 JVM 和多语言虚拟机,Oracle 也在大力推广) 将在这些领域发挥作用。

9. 总结

Oracle JDK 作为 Java 平台的官方参考实现,拥有深厚的历史积淀、强大的技术基础和成熟的生态系统。其核心组成部分——高性能的 HotSpot JVM、全面的标准库和强大的开发工具——使其成为 Java 开发者的重要选择。

然而,自 Java 11 以来的许可模式变化是使用 Oracle JDK 时必须充分理解和考虑的关键因素。对于商业生产环境的使用,尤其是与对外提供的商业产品或服务相关联时,通常需要购买 Oracle Java SE Subscription。

在当今的 Java 生态中,开发者和企业拥有更多选择,如各种基于 OpenJDK 的免费发行版。选择 Oracle JDK 还是其他 OpenJDK 发行版,取决于具体的项目需求、预算、对官方支持的需求以及对许可条款的接受程度。

无论如何,理解 Oracle JDK 的过去、现在和未来,对于每一个 Java 开发者和架构师来说,都是深入掌握 Java 生态、做出明智技术决策的关键一步。Oracle JDK 依然是 Java 世界中一个强大且重要的存在,即使其角色和使用方式正在随着时代和许可政策的变化而演进。


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部