當前位置: 妍妍網 > 碼農

Java 22 正式釋出!

2024-03-20碼農

整理 | 屠敏

出品 | CSDN(ID:CSDNnews)

流水的程式語言,鐵打的 Java。

不知不覺間,Java 迎來了其正式的 JDK 22 版本,這是一個短期版本,可以從 Oracle.com (https://www.oracle.com/java/technologies/downloads/) 下載,將獲得 Oracle 為期六個月的高級支持。

對此,Oracle 官方也釋出了詳盡的公告進行了分享。

JDK 22 提供了 12 項重要的增強功能,這些增強功能有自己的 JDK 增強提案 (JEP),其中包括 7 項預覽功能和 1 項孵化功能。這些改進涉及 Java 語言、API、效能以及 JDK 中包含的工具:

JEP 423: G1 引入區域固定機制,降低 GC 延遲

G1 的區域固定旨在減少延遲,從而無需在 Java 本機介面 (JNI) 關鍵區域期間禁用垃圾收集 (GC)。這意味著使用 JNI 時,Java 執行緒無需在 G1 GC 操作完成之前等待,從而提高開發人員的工作效率。

JEP 447: super(...) 之前添加語句(預覽)

Super(...) 之前的語句預覽來自 Amber 計畫,它與語言中的建構函式有關, 允許在顯式建構函式呼叫之前出現不參照所建立例項的語句 。該功能帶來:

  • 為開發人員提供了更大的自由度來表達建構函式的行為,使目前必須在輔助靜態方法、輔助中間建構函式或建構函式參數中衍生的邏輯得以更自然地放置。

  • 保留建構函式在類例項化過程中按自上而下的順序執行的現有保證,確保子類別建構函式中的程式碼不會幹擾超類的例項化。

  • 無需對 JVM 進行任何更改。 此 Java 語言功能僅依賴於 JVM 目前的能力,即驗證和執行建構函式內顯式建構函式呼叫之前出現的程式碼。

  • 這是迄今為止 JDK 22 中唯一一個尚未在標準 Java 中預覽或孵化的功能。

    JEP 454: 外部函式與記憶體 API

    這一功能之前已經在 JDK 19、JDK 20 和 JDK 22 中預覽,現如今在 JDK 22 中已經最終確定。它 允許 Java 程式與 Java 執行時之外的程式碼和數據互操作。 透過有效呼叫外部函式(即 JVM 之外的程式碼)和安全存取外來記憶體(即 JVM 不管理的記憶體),API 使 Java 程式能夠呼叫本地庫和處理本地數據,而不會出現 JNI 的脆性和危險。

    這項功能帶來一些好處:

  • 生產力提升——用簡潔、可讀性強的純 Java API 取代本地方法和 Java 本地介面 (JNI) 的脆弱機制。

  • 效能——提供對外部函式和記憶體的存取,其開銷可與 JNI 和 sun.misc.Unsafe 相媲美,甚至更好。

  • 廣泛的平台支持——在 JVM 執行的每個平台上都能發現和呼叫本地庫。

  • 統一性——提供在多種記憶體(如本地記憶體、持久記憶體和托管堆記憶體)中對結構化和非結構化數據(大小不限)進行操作的方法。

  • 健全性——保證即使在多個執行緒之間分配和刪除記憶體時,也不會出現 use-after-free 錯誤。

  • 完整性——允許程式對本地程式碼和數據執行不安全的操作,但預設情況下會向使用者發出警告。

  • JEP 456: 未命名變量與模式

    改進了需要但未使用變 量聲明或巢狀模式時的可讀性。 兩者都用底線字元表示。這一功能的目標包括:

  • 捕捉開發人員未使用給定繫結或 lambda 參數的意圖,並強制執行該內容, 以明確程式並減少出錯機會。

  • 透過辨識必須聲明( 如在 catch 子句中)但未使用的變量,提高所有程式碼的可維護性。

  • 許多個模式出現在一個 case 標簽中,前提是它們都沒有聲明 模式變量

  • 過消除 不必要的巢狀 型別模式,提高記錄模式的可讀性。

  • 這項提供已經在 JDK 21 中預覽,並在 JDK 22 中最終確定,無需更改。

    JEP 457: 類檔 API(預覽)

    它的目的是為解析、生成和轉換 Java 類檔提供標準 API。 該 API 可 使依賴它的 框架和 序自動支持 最新 JDK 中的最新類檔,從而可快速、輕松地采用以類檔表示的新語言和虛擬機器功能。

    JEP 458: 啟動多檔原始碼程式

    允許使用者執行以多個 Java 原始碼檔形式提供的程式,而無需首先對其進行編譯。這一功能的目標是 使小程式向大型程式的過渡更加漸進,提高開發人員的工作效率,使開發 人員能夠選擇是否以及何時配置構建工具。

    JEP 459: 字串樣版(第二次預覽)

    字串樣版是對 Java 現有字串文字量和文本塊的補充,它將文字文本與嵌入式運算式和樣版處理器結合起來,從而產生專門的結果。

    目標包括:

  • 透過輕松 表達包含執行時計算值的字串,簡化了 Java 程式的編寫。

  • 提高了混合文本和運算式的可讀性,無論文本適合單行原始碼(如字串字面量)還是跨越多行原始碼(如文本塊)。

  • 透過支持對樣版及其嵌入式運算式的值進行驗證和轉換,提高了由使用者提供的值組成字串並將其傳遞給其他系統(如構建資料庫查詢)的 Java 程式的安全性。

  • 允許 Java 庫定義字串樣版中使用的格式化語法,從而保持靈活性。

  • 簡化了接受以非 Java 語言編寫的字串(如 SQL、XML 和 JSON)的 API 的使用。

  • 無需透過中間字串表示形式進行傳輸,即可建立由文字文本和嵌入式運算式計算得出的非字串值。

  • JEP 460: 向量 API(第七個孵化器)

    用於表達向量計算的 API,可在執行時可靠地編譯為支持的 CPU 架構上的最佳向量指令,從而實作優於同等純量計算的效能。

    該 API 提供了一種在 Java 中編寫復雜向量演算法的方法,它使用現有的 HotSpot 自動向量化演算法,但采用了一種使用者模型,使向量化更具可預測性和魯棒性。

    這一功能已在 Java 之前的版本中孵化,最早可追溯到 2021 年 3 月的 JDK 16。API 的目標包括:簡潔明了、與平台無關、在 x64 AArch64 架構上提供可靠的執行時編譯和效能。

    JEP 461: 流收集器(預覽)

    此功能增強了 Stream API,以支持自訂中間操作。 這將允許流管道以現有內建中間操作難以實作的方式轉換數據。

    透過使流中的常見自訂操作,提高開發人員的工作效率和程式碼可讀性。

    JEP 462: 結構化並行(第二次預覽)

    借助 Project Loom 的結構化並行,可以透過 API 簡化並行編程。該 API 將不同 執行緒中執行的一組相關任務視為一個工作單元,從而簡化了錯誤處理和提高了可靠性,並增強了可觀察性。

    JEP 463: 隱式聲明的類和例項主方法(第二次預覽)

    學生可以編寫自己的第一個 Java 程式,而無需了解專為大型程式設計的語言特性。 學生無需使用單獨的語言方言,就可以編寫單類程式的精簡聲明,然後隨著技能的提高,無縫擴充套件他們的程式,使用更高級的功能。

    這一功能 為 Java 編程提供了一個平滑的階梯,使教師可以循序漸進地引入概念。同時 幫助學生以簡潔的方式編寫基本程式,並隨著技能的提高而優雅地擴充套件程式碼,以及 減少編寫指令碼和命令列實用程式等簡單程式的過程。

    JEP 464: 作用域值(第二次預覽)

    實作執行緒內和執行緒間不可變數據的高效共享。它的目標主要包括:

  • 易用性——提供了一種編程模型,可線上程內共享數據,也可與子執行緒共享數據,從而簡化數據流的推理。

  • 可理解性——使共享數據的生命周期從程式碼的語法結構中可見。

  • 穩健性——確保只有合法的呼叫者才能檢索呼叫者共享的數據。

  • 效能——將共享數據視為不可變數據,允許大量執行緒共享,並實作執行時最佳化。

  • 除了 JEP 中描述的上述更改外,釋出說明中還列出了許多較小的更新,對此感興趣的小夥伴不妨透過官方公告進行速覽: https://blogs.oracle.com/java/post/the-arrival-of-java-22

    此外,Oracle 也在公告中提到,Java 22 版本裏,在標記為已修復的 2,251 個 JIRA 問題中,有不少是 Java 社群成員修復的,其中亞馬遜、ARM、谷歌、華為、IBM、英特爾、ISCAS、微軟、紅帽、Rivos、SAP 和騰訊等組織開發者做出的顯著貢獻。

    最後值得一提的是,正如文章伊始所述,JDK 22 是一個短期支持版本,升級也需謹慎。那麽現在的你正在使用 Java 的哪個版本呢?

    推薦閱讀:

    4 月 25 - 26 日,由 CSDN 和高端 IT 咨詢和教育平台 Boolan 聯合主辦的「全球機器學習技術大會」將在上海環球港凱悅酒店舉行,特邀近 50 位技術領袖和行業套用專家,與 1000+ 來自電商、金融、汽車、智慧制造、通訊、工業互聯網、醫療、教育等眾多行業的精英參會聽眾,共同探討人工智慧領域的前沿發展和行業最佳實踐。