Java 22正式釋出,一文了解全部新特性

程序猿DD發表於2024-03-20

就在昨晚,Java 22正式釋出!該版本提供了 12 項功能增強,其中包括 7 項預覽功能和 1 項孵化器功能。它們涵蓋了對 Java 語言、API、效能以及 JDK 中包含的工具的改進。

下面就來一起學習一下該版本都更新了哪些新特性!

Unnamed Variables & Patterns - JEP 456

JEP 456 - 未命名變數和模式:當需要但未使用變數宣告或巢狀模式時,提高了可讀性。兩者都由下劃線字元表示。

價值

  • 捕獲開發人員的意圖,即未使用給定的繫結或 lambda 引數,並強制執行該屬性以澄清程式並減少出錯的機會。
  • 透過識別必須宣告(例如,在 catch 子句中)但未使用的變數,提高所有程式碼的可維護性。
  • 允許多個模式出現在單個 case 標籤中,如果它們都沒有宣告任何模式變數。
  • 透過消除不必要的巢狀型別模式來提高記錄模式的可讀性。

Statements before super (…) [Preview] - JEP 447

在建構函式中,允許不引用正在建立的例項的語句出現在顯式建構函式呼叫之前。

價值

  • 為開發人員提供了更大的自由來表達建構函式的行為,從而可以更自然地放置目前必須納入輔助靜態方法、輔助中間建構函式或建構函式引數中的邏輯。
  • 保留建構函式在類例項化期間按自上而下順序執行的現有保證,確保子類建構函式中的程式碼不會干擾超類例項化。
  • 不需要對 Java 虛擬機器進行任何更改。此 Java 語言功能僅依賴於 JVM 驗證和執行建構函式中顯式建構函式呼叫之前出現的程式碼的當前能力。

String Templates (2nd Preview) - JEP 459

字串模版的第2個預覽版,關於該功能之前DD給大家介紹過,更多細節可以看看之前的這篇文章String Templates(字串模版)

價值

  • 透過輕鬆表達包含執行時計算值的字串,簡化了 Java 程式的編寫。
  • 增強混合文字和表示式的表示式的可讀性,無論文字適合單個源行(如字串文字)還是跨越多個源行(如文字塊)。
  • 透過支援模板及其嵌入表示式的值的驗證和轉換,提高 Java 程式的安全性,這些程式從使用者提供的值組成字串並將其傳遞到其他系統(例如,構建資料庫查詢)。
  • 透過允許 Java 庫定義字串模板中使用的格式化語法來保留靈活性。
  • 簡化了接受非 Java 語言(例如 SQL、XML 和 JSON)編寫的字串的 API 的使用。
  • 允許建立根據文字文字和嵌入表示式計算的非字串值,而無需透過中間字串表示形式進行傳輸。

Implicitly Declared Classes and Instance Main Methods (2nd Preview) - JEP 463

隱式宣告的類和例項主要方法(2nd 預覽)- JEP 463

學生可以編寫他們的第一個 Java 程式,而無需瞭解為大型程式設計的語言功能。學生無需使用單獨的語言方言,而是可以為單類程式編寫簡化的宣告,然後隨著技能的增長無縫擴充套件他們的程式以使用更高階的功能。關於該特性,之前DD也介紹過,更多細節可見這篇文章未命名類和例項的Main方法

價值

  • 加速 Java 學習
  • 為 Java 程式設計提供了一個平滑的入門通道,以便教師可以循序漸進地介紹概念。
  • 幫助學生以簡潔的方式編寫基本程式,並隨著他們的技能增長而優雅地擴充套件他們的程式碼。
  • 減少編寫簡單程式(例如:指令碼和命令列實用程式)的方式。
  • 不引入單獨的初學者工具鏈;學生程式應該使用與編譯和執行任何 Java 程式相同的工具來編譯和執行。

Foreign Function & Memory API - JEP 454

外部函式和記憶體 API - JEP 454

允許 Java 程式與 Java 執行時之外的程式碼和資料進行互操作。透過有效地呼叫外部函式(即 JVM 外部的程式碼),並安全地訪問外部記憶體(即不受 JVM 管理的記憶體),API 使 Java 程式能夠呼叫本機庫並處理本機資料,而不會出現脆弱性和危險。 JNI。

價值

  • 生產力:用簡潔、可讀且純 Java API 取代脆弱的本機方法和 Java 本機介面 (JNI)。
  • 效能:提供對外部函式和記憶體的訪問,其開銷與 JNI 和 sun.misc.Unsafe 相當(如果不是更好的話)。
  • 廣泛的平臺支援:允許在 JVM 執行的每個平臺上發現和呼叫本機庫。
  • 一致性:提供在多種記憶體(例如本機記憶體、持久記憶體和託管堆記憶體)中操作無限大小的結構化和非結構化資料的方法。
  • 健全性:保證沒有釋放後使用錯誤,即使在多個執行緒之間分配和釋放記憶體時也是如此。
  • 完整性:允許程式使用本機程式碼和資料執行不安全的操作,但預設警告使用者此類操作。

Class-File API (Preview) - JEP 457

類檔案 API(預覽版)- JEP 457,提供用於解析、生成和轉換 Java 類檔案的標準 API。

價值

  • 該API允許依賴它的框架和程式自動支援最新JDK中的最新類檔案,以便可以快速、輕鬆地採用以類檔案表示的新語言和VM功能。

Stream Gatherers (Preview) - JEP 461

Stream Gatherers(預覽版)- JEP 461,增強了 Stream API 以支援自定義中間操作。這將允許流管道以現有內建中間操作不易實現的方式轉換資料。

價值

  • 透過使流中的常見自定義操作更加靈活和富有表現力,提高開發人員的工作效率和程式碼可讀性。儘可能允許中間操作操作無限大小的流。

Structured Concurrency (2nd Preview) - JEP 462

結構化併發(2nd 預覽版)- JEP 462,簡化併發程式設計。結構化併發將在不同執行緒中執行的相關任務組視為單個工作單元,從而簡化錯誤處理和取消、提高可靠性並增強可觀察性。

價值

  • 透過推廣一種程式設計風格來簡化併發程式碼的開發,這種程式設計風格可以消除因取消和關閉而產生的常見風險(例如執行緒洩漏和取消延遲),並提高併發程式碼的可觀察性。

Scoped Values (2nd Preview) - JEP 464

範圍值(2nd 預覽)- JEP 464,實現執行緒內和執行緒間不可變資料的高效共享。

價值

  • 易於使用 - 提供一個程式設計模型來線上程內以及與子執行緒共享資料,以簡化有關資料流的推理。
  • 可理解性——使共享資料的生命週期從程式碼的語法結構中可見。
  • 魯棒性——確保呼叫者共享的資料只能由合法的被呼叫者檢索。
  • 效能——將共享資料視為不可變,以允許大量執行緒共享,並實現執行時最佳化。

Vector API (7th Incubator) - JEP 460

向量 API(7th 孵化器)- JEP 460,一個用於表達向量計算的 API,可在執行時可靠地在支援的 CPU 架構上編譯為最佳向量指令,從而實現優於等效標量計算的效能。此 JEP 建議在 JDK 22 中重新孵化該 API,相對於JDK 21。該實現包括錯誤修復和效能增強。我們包括以下顯著變化:

  • 支援使用任何原始元素型別的陣列支援的堆 MemorySegments 進行向量訪問。以前的訪問僅限於由位元組陣列支援的堆 MemorySegment。

價值

  • 提供清晰簡潔的 API,能夠清晰簡潔地表達各種向量計算,這些向量計算由迴圈內組成的向量運算序列組成,並且可能還包含控制流。
  • 該 API 設計為與 CPU 架構無關,可在支援向量指令的多種架構上實現。
  • 在 x64 和 AArch64 架構上提供可靠的執行時編譯和效能。

Regional Pinning for G1 - JEP 423

G1 的區域固定 - JEP 423,透過在 G1 中實現區域固定來減少延遲,以便在 Java 本機介面 (JNI) 關鍵區域期間無需禁用垃圾收集。

價值

  • 使用 JNI 時,Java 執行緒無需在 G1 GC 操作完成之前等待,從而提高開發人員的工作效率。

Launch Multi-File Source-Code Programs - JEP 458

啟動多檔案原始碼程式 - JEP 458,允許使用者執行作為多個 Java 原始碼檔案提供的程式,而無需先進行編譯。

價值

  • 透過使從小程式到大型程式的過渡更加漸進,提高開發人員的工作效率,使開發人員能夠選擇是否以及何時配置構建工具。
  • 請注意,預覽功能已完全指定並完全實現了 Java SE 平臺的語言或 VM 功能,但它們是暫時的。它們在 JDK 功能版本中提供,以便開發人員根據實際使用情況提供反饋,然後再在未來版本中永久保留。這也為工具供應商提供了在最終確定為 Java SE 標準之前致力於支援功能的機會。
  • 孵化器模組中的 API 將非最終 API 和非最終工具交給開發人員和使用者,以收集反饋,最終提高 Java 平臺的質量。
  • 除了 JEP 中描述的更改之外,發行說明中還列出了許多較小的更新,許多應用程式開發人員和系統管理員都會對此感興趣。其中包括棄用過時的 API 和刪除以前棄用的 API。

其他更新

Java 22 發行說明中還有​​一些其他關鍵更新:

  • 向 keytool 和 jarsigner 新增附加演算法。
  • 垃圾收集器吞吐量的提高,尤其是與“年輕”垃圾相關的情況。
  • 更好的系統模組描述符版本報告。
  • 改進了本機程式碼的“wait”處理選項。
  • Unicode 通用區域設定資料儲存庫已更新至版本 44。
  • 型別註釋支援從位元組碼載入的型別。
  • ForkJoinPool 和 ForJoinTasks 現在可以更好地處理不間斷任務。
  • 配置客戶端與伺服器 TLS 連線屬性的額外靈活性。
  • 改進了本機記憶體跟蹤,包括報告峰值使用情況的能力

最後注意:JDK 22 是透過六個月的釋出節奏按時交付的 13th 功能版本。由於預期改進源源不斷,這種程度的可預測性使開發人員能夠輕鬆管理創新的採用。Oracle 不會為 JDK 22 提供長期支援,在 2023 年 9 月之前提供更新,之後它將被 Oracle JDK 23 取代。最近的長期維護版本是Java 21,更多關於Java新特性的解讀和學習歡迎關注《Java 新特性解讀》

歡迎關注我的公眾號:程式猿DD。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源

相關文章