Ohhnews

分类导航

$ cd ..
foojay原文

生产环境如何选择Java运行时?OpenJDK发行版深度对比

#java#openjdk#开发运维#软件工程#技术选型

TLDR

  • 本文列出的八个发行版均源自相同的 OpenJDK 代码库。它们的共同点主要在于版本号,但在支持归属、供应商责任以及附加工具的多样性方面各有千秋。
  • BellSoft 和 Azul 是两家将 Java 作为核心业务而非产品组合一部分的供应商。它们的区别在于支持周期长度和工具链的深度。
  • 如果您的基础设施已经标准化为 AWS、Azure、RHEL、SAP 或 IBM 平台,那么选择与其对齐的发行版是显而易见的。真正的决策压力在于那些没有此类约束的团队。

简介

选择 Java 运行时就像选择任何大宗基础设施一样,不是吗?你只需要找到需要的版本,然后下载构建包即可。

剧透预警:事实并非如此。

此对比中的发行版有两个共同点。首先,它们都源自相同的 OpenJDK 源代码。其次,大多数版本都通过了 TCK(Java SE 技术兼容性工具包)验证,这意味着它们已确认运行行为符合规范。这意味着它们可以在无需修改的情况下运行相同的 Java 应用程序。

它们的分歧在于如何处理突发状况:谁负责提供支持、构建版本的维护周期有多长,以及供应商的产品组合是否与您现有的基础设施相匹配。

本文对主流 OpenJDK 发行版进行了中立的对比,并指出了团队应关注的关键特性。

OpenJDK

原版 OpenJDK 是上游开发项目。它是社区基准,具有最大的自由度,且不与任何供应商绑定。该项目旨在开发下一个 Java 版本;它没有商业支持,没有生命周期保证,旧版本也不包含最新的安全补丁。

因此,上游 OpenJDK 并非设计为长期维护的企业级运行时。切勿在生产环境中使用上游 OpenJDK!

Eclipse Temurin

Temurin 是 Eclipse 基金会通过 TCK 验证的 OpenJDK 构建版本,由 Adoptium 项目负责生产。它是免费的,支持广泛的平台,通过 Docker 容器和包管理器分发,并发布了涵盖至少四年的 LTS(长期支持)路线图。季度更新与 OpenJDK 发布周期保持一致。与原版上游 OpenJDK 相比,这是本列表中第一个真正可以部署的发行版。

其短板在于支持归属。Adoptium 不出售商业支持,而是列出了第三方提供商。对于那些要求“二进制文件和支持必须由同一供应商提供”的组织,Temurin 不符合要求。但对于那些能够接受社区治理和第三方支持方案的团队来说,这是最自然的基准选择。

Liberica JDK

BellSoft 的 Liberica JDK 通过了 TCK 认证,且可免费用于生产环境。Paketo 构建包默认集成该版本。VMware 推荐将其用于 Spring 框架。其 LTS 和非 LTS 版本覆盖了广泛的平台,且 LTS 版本的商业支持长达 8.5 年。对于仍在运行 Java 6 或 7 的团队,BellSoft 也提供这些版本的商业支持。季度更新分为两条轨道:仅含安全补丁的 CPU 版本,以及包含补丁和非关键修复的 PSU 版本。

BellSoft 是一家以 Java 为中心的供应商。其产品组合不仅限于 JDK 本身,还扩展到额外的 Java 部署工具,涵盖 JavaFX 构建、OpenWebStart 支持、Mission Control、基于 GraalVM 的 Liberica Native Image Kit、容器优化版 Linux 发行版 Alpaquita Linux、轻量级容器镜像、加固版容器镜像以及产品发现 API。对于希望由一家供应商统一提供运行时、Java 专用 Linux 以及容器化资产的团队来说,这非常有用。

Azul Zulu

由 Azul 开发的 Azul Zulu 是免费且通过 TCK 验证的,其 LTS 和非 LTS 构建版本覆盖了广泛的平台。LTS 版本提供 8 年支持,并为 Java 6 和 7 提供商业支持。季度更新包括 CPU 和 PSU 两条轨道。

Azul 是专注于 Java 的供应商之一。它不仅提供 Zulu 二进制文件,还提供诸如 Azul Mission Control 和 JVM 库存/发现工具等额外的 Java 产品。附加功能包括 OpenJFX 构建、用于 Java Web Start 用例的 IcedTea-Web、文档化的元数据/发现 API 以及针对 Applet 的商业支持。

除 Zulu 外,Azul 还提供 Platform Prime:这是一种替代 OpenJDK HotSpot 的 JVM,具有额外的性能优化功能:C4(无停顿垃圾回收器)、ReadyNow! 预热加速器、Falcon JIT 编译器,以及可以将 JIT 编译从运行实例中卸载的 Cloud Native Compiler。

Amazon Corretto

Amazon Corretto 是由 AWS 维护并经 TCK 验证的发行版,适用于 Linux、Windows 和 macOS,提供 LTS 版本的定期更新及 Docker 镜像。

AWS 特有的功能使已在 AWS 环境中的团队受益:Amazon Corretto Crypto Provider (ACCP) 针对 AWS 服务进行了优化,而 SnapStart 则将基于 Java 的 Lambda 函数的冷启动延迟降低了多达 10 倍。

商业支持不是单独的 Corretto 产品,而是通过 AWS 支持计划(AWS Support Plans)提供的。对于已经在 AWS 上且拥有有效支持计划的团队,JDK 支持包含在他们现有的服务关系中。但在该环境之外,商业支持的选择较少。

IBM Semeru Runtimes

IBM Semeru 基于 OpenJ9 构建,这是一种替代 HotSpot 的 JVM 实现。它提供开源版(GPLv2 + Classpath Exception)和 IBM 许可证下的认证版,商业支持通过 IBM Runtimes for Business 提供。季度更新涵盖 LTS 版本和当前发布版本。

选择 Semeru 的第二个理由是平台覆盖:它支持 IBM Z、Power、AIX 和 z/OS 相关环境。对于使用这些平台的组织,Semeru 是自然之选。对于其他考虑 Semeru 的团队,主要吸引力在于 OpenJ9 本身——其 JVM 优化是其独特之处。但也意味着它不是列表中最“标准”的选择,因为未来可能难以迁移到其他 JVM 实现。

Red Hat OpenJDK

Red Hat 的 OpenJDK 构建版本专为 Red Hat 技术栈设计:RHEL、OpenShift 和受支持的中间件环境。它随 RHEL 订阅提供,覆盖所有 LTS 版本,且仅在 Windows 和 RHEL 上运行——不支持 macOS 或其他 Linux 发行版。

JDK 支持生命周期取决于 RHEL:如果某个 RHEL 版本在随附的 JDK 版本之前停止支持,则 JDK 支持也会随之结束。

关于 TCK 验证,Red Hat 的政策明确指出,2025 年 7 月 1 日之后交付的 OpenJDK 8 构建版本不再经过 TCK 认证。后续版本仍保持 TCK 测试。

对于标准化使用 RHEL 和 OpenShift 的团队,JDK 支持遵循与整个技术栈相同的生命周期。平台限制使得它在这些环境之外难以被采纳。

SapMachine

SapMachine 是 SAP 的免费、经 TCK 验证的发行版,也是许多 SAP 应用程序和 SAP 业务技术平台服务的默认运行时,支持 Linux、Windows 和 macOS。它涵盖除 Java 8 之外的所有 LTS 版本以及当前版本,并提供至少四年的文档化 LTS 支持。季度更新与 OpenJDK 保持一致。

SAP 仅为在 SAP 支持产品环境下使用 SapMachine 的客户提供商业支持。

重要提示:SAP 会应用一些并未提交到上游的补丁。仅保留在 SapMachine 中的供应商特定修复程序,在迁移到其他发行版时可能会引发兼容性问题。深度使用 SAP 技术栈的组织应优先选择 SapMachine。对于非 SAP 工作负载,支持范围较窄且迁移风险真实存在。

Microsoft Build of OpenJDK

微软的 OpenJDK 发行版是免费且开源的,涵盖除 Java 8 之外的 LTS 版本及当前版本,支持 Linux、macOS 和 Windows,部分版本提供 Alpine 兼容的二进制文件。除了季度更新外,还提供针对特定平台的安装程序和包管理器安装方式。

与 SapMachine 存在同样的补丁警告:微软可能会包含尚未向上游回传的修复程序,且不保证这些修复程序会进入主要的 OpenJDK 项目。商业支持需要有效的 Azure 支持计划,且仅涵盖 Azure 相关服务上的工作负载。

做出决定

如果采购要求二进制文件和支持必须由单一供应商提供,那么上游 OpenJDK 和 Temurin 都不适用。平台对齐的团队可以更快做出选择:AWS 使用 Corretto,RHEL 和 OpenShift 商店由其 Red Hat 订阅覆盖,SAP 环境使用 SapMachine,IBM 企业平台选择 Semeru,而 Azure 工作负载则使用微软的发行版。

对于没有强平台对齐需求的团队,剩下的问题就是供应商的侧重点。BellSoft 和 Azul 将 Java 作为其核心业务。这体现在支持周期长度、旧版本覆盖范围以及工具链深度上。这两家公司都提供了各种额外的功能、工具和优化,可以为以 Java 为主的工作负载的组织提供切实的商业价值。

在社区治理和第三方支持方案可行的场景下,Temurin 仍然是可能的选择。除此之外,决策主要取决于哪个供应商的技术栈已经映射到团队所维护的基础设施。

本文 Which Java Runtime Should You Use in Production? Comparing OpenJDK Distributions 最初发布于 foojay