就在昨晚,Java 22正式發佈!該版本提供了 12 項功能增強,其中包括 7 項預覽功能和 1 項孵化器功能。它們涵蓋了對 Java 語言、API、性能以及 JDK 中包含的工具的改進。 下麵就來一起學習一下該版本都更新了哪些新特性! Unnamed Variables & Patterns - ...
就在昨晚,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。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源