Java 22正式發佈,一文了解全部新特性

就在昨晚,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。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章