1. 简介

本篇文章将深入探讨 Oracle JDK 与 OpenJDK 之间的差异。我们会先分别介绍两者,再进行对比分析,并列出其他主流的 JDK 实现方案。

2. Oracle JDK 与 Java SE 的历史

JDK(Java Development Kit)是用于 Java 平台开发的核心环境,它不仅包含完整的 Java 运行时环境(JRE),还包括编译器、调试工具等开发工具。

✅ Oracle 官方建议使用 JDK 来指代 Java SE(标准版)开发工具包。

Java SE 的发展时间线如下:

  • JDK Beta – 1995
  • JDK 1.0 – 1996年1月
  • JDK 1.1 – 1997年2月
  • J2SE 1.2 – 1998年12月
  • J2SE 1.3 – 2000年5月
  • J2SE 1.4 – 2002年2月
  • J2SE 5.0 – 2004年9月
  • Java SE 6 – 2006年12月
  • Java SE 7 – 2011年7月
  • Java SE 8 (LTS) – 2014年3月
  • Java SE 9 – 2017年9月
  • Java SE 10 (18.3) – 2018年3月
  • Java SE 11 (18.9 LTS) – 2018年9月
  • Java SE 12 (19.3) – 2019年3月
  • Java SE 13 – 2019年9月
  • Java SE 14 – 2020年3月
  • Java SE 15 – 2020年9月
  • Java SE 16 – 2021年3月
  • Java SE 17 (LTS) – 2021年9月
  • Java SE 18 – 2022年3月
  • Java SE 19 – 2022年9月
  • Java SE 20 – 2023年3月
  • Java SE 21 (LTS) – 2023年9月

⚠️ 斜体版本表示已不再支持。

从 Java SE 10 开始,版本发布周期缩短为每六个月一次,但 LTS(长期支持)版本仍为三年一更。目前最新的 LTS 是 Java SE 17 和 Java SE 21。

Oracle 在 2010 年收购 Sun Microsystems 后,将 JDK 正式更名为 Oracle JDK,此前为 Sun JDK。

3. OpenJDK

OpenJDK 是一个免费、开源的 Java SE 平台实现,由 Sun Microsystems 于 2006 年启动,并于 2007 年首次发布。

✅ 自 Java SE 7 起,OpenJDK 成为 Java SE 的官方参考实现。

从 Java 10 开始,OpenJDK 的开发由 JDK Project 主导,Oracle 与社区共同维护。

OpenJDK 各版本发布情况如下:

  • OpenJDK 6 – 基于 JDK 7 的开源版本
  • OpenJDK 7 – 2011年7月28日
  • OpenJDK 7u – JDK 7 的更新版本
  • OpenJDK 8 – 2014年3月18日
  • OpenJDK 8u – JDK 8 的更新版本
  • OpenJDK 9 – 2017年9月21日
  • JDK 10 – 2018年3月20日
  • JDK 11 – 2018年9月25日
  • JDK 12 – Stabilization phase

4. Oracle JDK 与 OpenJDK 的关键区别

4.1. 发布周期

  • Oracle JDK:每三年发布一次 LTS 版本
  • OpenJDK:每六个月发布一次新特性版本

✅ Oracle 提供长期支持,OpenJDK 仅支持到下一个版本发布前。

4.2. 许可协议

  • Oracle JDK:使用 Oracle Binary Code License Agreement(BCL)
  • OpenJDK:使用 GNU GPL v2 + Classpath Exception(GPLv2+CPE)

⚠️ 从 Java 11 开始,Oracle 改为双许可模式(开源 + 商业许可)。Java SE 8 在 2019 年 1 月后,若用于商业用途需付费。

4.3. 性能表现

✅ Oracle JDK 在响应速度和 JVM 性能上略优于 OpenJDK,尤其在企业级应用中更注重稳定性。

⚠️ OpenJDK 发布频繁,可能带来一些不稳定因素。社区反馈中也有部分用户反映性能问题。

4.4. 功能特性

特性 Oracle JDK OpenJDK
Flight Recorder ✅(Java 11+)
Java Mission Control
Application Class-Data Sharing ✅(Java 11+)
ZGC(Z Garbage Collector) ✅(Java 11+)
更多 GC 选项
字体渲染器

✅ 自 Java 11 起,Oracle JDK 与 OpenJDK 在功能上基本一致。

4.5. 开发与流行度

  • Oracle JDK:由 Oracle 全资开发
  • OpenJDK:由 Oracle、社区、企业(如 Red Hat、IBM、SAP)共同开发

✅ 大多数主流 Linux 发行版默认使用 OpenJDK。JetBrains、Google 等公司也已转向 OpenJDK。

5. Java 11 后的重大变化

根据 Oracle 官方博客,从 Java 11 开始,Oracle JDK 与 OpenJDK 在功能上趋于一致:

  • Oracle JDK 采用 GPLv2+CPE 和商业许可双重授权
  • 原本仅在 Oracle JDK 中可用的商业特性(如 Flight Recorder、ZGC)现已开放至 OpenJDK
  • Oracle JDK 仍保留安装包、品牌标识等附加组件
  • OpenJDK 以 zip/tar.gz 格式分发

✅ 从 Java 11 开始,Oracle JDK 与 OpenJDK 的功能差异几乎可以忽略。

6. 其他主流 JDK 实现

6.1. 开源免费实现(按字母排序)

  • AdoptOpenJDK(已更名为 Adoptium)
  • Amazon Corretto
  • Azul Zulu
  • Eclipse OpenJ9
  • GraalVM CE
  • Liberica JDK
  • HotSpot(OpenJDK 默认 JVM)
  • 等等...

6.2. 商业闭源实现

  • Azul Zing JVM
  • GraalVM EE
  • Excelsior JET
  • SAP JVM
  • Waratek CloudVM
  • 等等...

7. Amazon Corretto 与 OpenJDK 的区别

Amazon Corretto 是 AWS 官方维护的 OpenJDK 发行版,专为云环境优化,提供免费的 LTS 支持。

✅ 与 OpenJDK 相比,Corretto 额外提供性能优化、安全补丁和云环境兼容性增强。

8. OpenJDK 与 AdoptOpenJDK(现为 Adoptium)的区别

8.1. 项目背景与治理

  • OpenJDK:Oracle 主导的官方参考实现
  • Adoptium:社区驱动的开源项目,提供预编译的 OpenJDK 二进制包

8.2. 构建与分发方式

  • OpenJDK:提供源码,用户需自行编译
  • Adoptium:提供各平台预编译包,开箱即用

8.3. 分发模型

  • OpenJDK:源码分发,需手动构建
  • Adoptium:提供二进制分发,支持主流包管理器(apt、yum 等)

8.4. 社区参与

  • OpenJDK:由 Oracle 与社区共同开发
  • Adoptium:完全社区驱动,鼓励广泛参与

8.5. 许可协议

✅ 两者均采用 GPLv2+CPE 许可协议,完全开源。

9. 结论

本文对比了 Oracle JDK 与 OpenJDK 的历史、特性、性能与许可差异,并介绍了其他主流 JDK 实现。自 Java 11 起,两者功能趋于一致,选择更多取决于部署场景和许可需求。

✅ 对于大多数开发者而言,OpenJDK 已完全满足生产需求,且更符合开源生态趋势。


原始标题:Differences Between Oracle JDK and OpenJDK