任何人都可以下载特定版本 Java Development Kit (JDK) 的源代码,并为主流平台编译其部分内容。OpenJDK 项目包括许多发行版,每个发行版都提供不同级别的 JDK 支持。在这篇博文中,我们将列出一些问题,以确保您使用适合您的发行版。
我们说 OpenJDK 是一个开源项目是什么意思?任何人都可以下载特定版本 Java Development Kit (JDK) 的源代码,并为主流平台编译其部分内容。这些可执行文件和库可以打包并作为 OpenJDK 发行版提供,目前有许多不同的发行版。您可以选择不同的提供商,从免费的、不受支持的到提供全面支持的商业提供商等等。
要声称与 Oracle Java SE 兼容,每个 OpenJDK 发行版中的单个二进制文件必须通过与该 Java 版本相关联的 Oracle 所有技术兼容性工具包 (TCK) 测试套件。由于有许多符合 TCK 标准的 OpenJDK 提供商,因此对它们进行评估可能是一项挑战。不同提供商之间的一些考虑因素包括:
哪些 Java 版本是受支持的?
截至 2025 年 1 月,在总共 20 多个 Java 版本中,有四个长期支持 (LTS) 版本。很容易找到最新 LTS 版本 Java 21 的 JDK 支持,但越往后,支持旧版本的提供商就越少。Oracle 在 2024 年 10 月结束了对上一个 LTS 版本 Java 17 的免费支持。只有 Azul 支持 Java 6 和 Java 7。

哪些平台是受支持的?
大多数用户在 Linux 和 Windows 等主流操作系统上运行应用程序,并使用英特尔和 AMD 等常见处理器。如果您的环境包括不太常见的平台(如基于 ARM 的处理器),或者您仍在 Solaris 操作系统上运行 Java 应用程序,您应该了解发行版是否为它们提供构建版本,以及是否继续提供修复?
一个版本将获得多长时间的支持?
即使在 LTS 版本中,不同的发行版也会提供不同的维护和支持期限。如果您的计划是让当前版本运行 10 年后再对代码进行任何更改,您需要确保该版本的 LTS 支持至少持续 10 年。有些发行版可能还会承诺在停止提供计划更新后继续支持某个版本。在这一被动支持阶段,用户仍可报告问题,如有必要,构建版本提供商可能会提供包含修复程序的特别更新。
提供更新的速度如何?
计划的 JDK 更新是通过 OpenJDK 项目开发的,并且在预先计划的日期和时间之前,由 OpenJDK 漏洞小组对其进行封锁。在投资 OpenJDK 发行版之前,您应该了解该发行版在封锁解除后数小时内提供更新的跟踪记录,以及过去是否出现过长时间的延迟。询问该发行版是否有 SLA,规定何时保证提供更新。更新速度非常重要,因为封锁解除后,安全漏洞的详细信息就会被公开,从而开始与时间赛跑。坏人开始开发漏洞;如果您的更新几天甚至几周都无法使用,您的系统就会面临风险。
稳定更新是否可用?
Oracle Java SE 为每次更新提供两种格式
- 关键补丁更新 (CPU):稳定的安全更新
- 补丁集更新 (PSU):完整更新
要保持最大程度的 JDK 支持,这两种更新都必不可少。当 Oracle 针对已知漏洞发布补丁时,您的组织可以快速实施 CPU 来修补该漏洞。如果只有 PSU,则必须实施整个更新,这不仅耗费时间和资源,还需要进行回归测试。只有 Oracle 和 Azul 提供 CPU。
即使符合 TCK 标准,一些 Java 用户仍然觉得除了 Oracle Java 支持外,其他任何支持都很昂贵。Azul Platform Core 客户通常比 Oracle Java SE 节省 70%。