天天看點

我應該使用哪個版本的 JDK?不同的廠商版本:

本文在寫作過程中參考了whichJDK
我應該使用哪個版本的 JDK?不同的廠商版本:

要建構和運作 Java 應用程式,就需要安裝 JDK 環境。

OpenJDK 是 Java SE 規範的開源軟體,但它隻是源代碼。二進制發行版由不同的供應商提供,适用于許多受支援的平台,這些發行版在許可證、商業支援、支援的平台和更新頻率方面有所不同。

先說結論:

✅ 建議使用 Adoptium Eclipse Temurin 17 并確定您的本地版本與 CI 和生産版本比對。

首先介紹不同版本的JDK

目前,JDK 計劃每六個月(即每年的三月和九月)釋出一個具有新版本。第三年的9 月釋出一個長期支援 (LTS) 版本,承諾最少更新三年。

JDK版本 類型 釋出日期 主要更新 推薦
8 長期支援 03/2014 lambda 先前釋出模型下的最後一個 LTS 版本。Oracle 的免費更新已結束,但仍由其他人維護。在接下來的幾個月内更新到 11 或 17!
9 特征 09/2017 子產品 引入了新的釋出模型。停産。現在更新到 11 或 17!
10 特征 03/2018 var 停産。現在更新到 11 或 17!
11 長期支援 09/2018 新的 HTTP 用戶端 廣泛使用的 LTS 版本。計劃在未來幾個月内更新到版本 17。
12 特征 03/2019 停産。現在更新到17!
13 特征 09/2019 停産。現在更新到17!
14 特征 03/2020 新的Switch表達式 停産。現在更新到17!
15 特征 09/2020 文本塊 停産。現在更新到17!
16 特征 03/2021 記錄 停産。現在更新到17!
17 長期支援 09/2021 密封類 目前的 LTS 版本。立即更新至 17.0.3+!
18 特征 03/2022 預設為 UTF-8

堅持17!

這是一個沒有重要功能的短期版本。

-Dfile.encoding=UTF-8

您可能想通過在目前的 JDK 中進行設定來檢查是否遇到“預設 UTF-8”的任何問題。
19 特征 09/2022 僅預覽和孵化器功能

堅持17!

如果您之前更新到 18,請立即更新到 19。

您必須決定是要堅持使用最新的 LTS 版本,還是要使用最新的功能版本并每六個月更新一次。兩種選擇都可以,但如果您不确定,請堅持使用最新的 LTS 版本。

OpenJDK 項目本身在openjdk.java.net上進行管理,您可以在其中找到規範、源代碼和郵件清單,但沒有可供下載下傳的建構版本。您需要選擇一個發行版。

不同的廠商版本:

Oracle OpenJDK 

Oracle 以壓縮存檔格式為 Linux、macOS 和 Windows 提供 OpenJDK 建構。

這些建構隻會更新 6 個月。在此短時間後将無法獲得更新和安全更新檔。這也适用于 LTS 版本!例如,最新的 OpenJDK 11 版本是11.0.2+9而目前的 OpenJDK 版本是11.0.12+7。

Oracle Java SE Development Kit (JDK)

Oracle 提供了 OpenJDK 的商業版本,它基于與 OpenJDK 完全相同的來源:Oracle Java SE Development Kit (JDK)。Oracle 為這些建構提供更新定期更新和安全更新檔。

Adoptium Eclipse Temurin

Eclipse Adoptium是Eclipse Foundation旗下的頂級項目,為開源軟體提供資源和專業的治理模型。Adoptium 工作組由對 Java 技術有戰略興趣的主要公司群組織組成,包括 Red Hat、IBM、Microsoft、Azul 和 iJUG。之前的 AdoptOpenJDK 項目已經遷移到 Eclipse Adoptium。

Adoptium OpenJDK 建構稱為Eclipse Temurin,以區分項目和建構。

Eclipse Temurin 建構是高品質的、供應商中立的,并且在寬松許可下經過了 TCK 測試。

Adoptium 表示,隻要積極維護相應的上遊源代碼,它将繼續為 LTS 版本建構二進制檔案。

AdoptOpenJDK

AdoptOpenJDK 項目是 Eclipse Adoptium 的前身,為預設的 HotSpot 和 OpenJ9 虛拟機提供高品質的 OpenJDK 建構。

Azul Zulu

Azul Systems, Inc. 專注于專業的 Java 技術和 JDK 的商業支援。Azul 在業界享有很高的聲譽,并參與了各種工作組來發展 Java 平台。

Azul為許多作業系統和架構提供名為Azul Zulu的開源 OpenJDK 建構。此外,Azul 還提供滿足特殊要求的建構,例如精簡的 JRE 和包含 OpenJFX 的建構。

這些建構的缺點是依賴于一家公司,這可能會突然更改其許可或更新政策。

Azul Zing

Azul Zing 是一個商業 JDK,目前作為Azul Platform Prime銷售。它需要與 Azul Systems 簽訂商業合同才能用于生産。

Zing 基于 OpenJDK,并添加了獲得專利的“C4 無間斷垃圾收集器”、“Falcon JIT 編譯器”(以更高的 CPU 使用率和更長的啟動和預熱時間為代價優化吞吐量)和一些功能加快編譯器預熱時間(通過分析和存儲檔案中訓練運作的優化來減輕 Falcon JIT 編譯器較慢的預熱時間)。

Azul Zing 在金融交易應用程式中有一些用例,其中 GC 暫停是一個問題。除此之外,正常 OpenJDK 包含免費的低暫停時間 GC Shenandoah和ZGC,它們可能是替代方案。

BellSoft Liberica JDK

與Azul類似,BellSoft專注于專業的Java技術和對JDK的商業支援。此外,BellSoft 在業界享有很高的聲譽,并參與了各種工作組來發展 Java 平台。

BellSoft為幾乎所有作業系統和架構提供名為Liberica JDK的開源 OpenJDK 建構。

流行的 Spring Boot 架構選擇 Liberica JDK 作為其buildpack的運作時。

這些建構的缺點是依賴于一家公司,這可能會突然更改其許可或更新政策。

IBM Semeru Runtime

IBM 開發了自己的 Java 虛拟機版本,稱為 J9,并作為Eclipse OpenJ9 開源。它是預設 HotSpot Java 虛拟機的替代品,但它從未獲得太多人氣。

IBM 現在提供基于 Eclipse OpenJ9 Java 虛拟機和一些 OpenJDK 類庫的名為Semeru Runtime的建構。OpenJ9記憶體占用低,使用共享類啟動速度快,但與 Hotspot 虛拟機相比吞吐量較低。

Amazon Corretto 

由于 Oracle 改變了對其 OpenJDK 建構的支援和許可政策,主要的雲提供商決定建立自己的托管 OpenJDK 建構并提供長期更新。顯然,這是為了規避風險,尤其是對甲骨文的訴訟。

2018 年,AWS 釋出了Corretto,這是另一個 OpenJDK 建構。

AWS 包括來自較新 OpenJDK 版本的錯誤修複的反向端口,并聲稱他們将添加可能尚未內建到 OpenJDK 項目中的更新檔。亞馬遜已經實施了一個替代加密提供商,該提供商已針對其服務進行了優化。它計劃用作 Corretto 中的預設加密實作。

Amazon 為主要開發平台提供發行版,并為其自己的 Amazon Linux 2 提供優化版本。

Microsoft  OpenJDK 

2021 年,微軟釋出了 OpenJDK 的 Microsoft Build,這是另一個 OpenJDK 建構。

Microsoft 可能會包含來自較新 OpenJDK 版本的錯誤修複的反向端口,并聲稱他們将添加可能尚未內建到 OpenJDK 項目中的更新檔。

Microsoft 為主要開發平台提供版本。

Alibaba Dragonwell

阿裡巴巴提供了一個 OpenJDK 建構,其中包括背景端口和一些額外的功能。

SapMachine

SapMachine 是另一個 OpenJDK Build,由 SAP 維護。

Red Hat OpenJDK

Red Hat 為 LTS 版本提供 OpenJDK 建構。

OJDK

該項目已停止。ojdkbuild 項目的目标是提供 OpenJDK 的 Windows x86_64 二進制檔案,這些二進制檔案在行為上盡可能接近 Linux OpenJDK 包,例如,通過使用系統庫而不是 zlib 或 OpenSSL 的打包版本。它使用了 CentOS 中包含的軟體包。這些建構的一個用例是在 Windows 機器上開發 Java 軟體并将它們部署到生産環境中的 Linux 伺服器。

GraalVM

GraalVM 是一個完全相容的 JDK,但與所有其他建構有很大不同。

GraalVM 由 Oracle 開發。它基于 OpenJDK,但包括一個新的高性能編譯器和一個新的多語言虛拟機(可以執行用不同程式設計語言編寫的代碼)。還可以建立高度優化且啟動速度極快的特定于平台的本機可執行檔案。