JDK 19:Java 19的新功能介紹

語言: CN / TW / HK

JDK 19:Java 19的新功能

虛擬執行緒、開關表示式的模式匹配、向量API和Linux/RISC-V埠都將在Java 19中出現,這是一個將於9月釋出的非LTS標準Java。

將於今年9月釋出的Java Development Kit 19剛剛提出了第七項功能:結構化併發,以簡化多執行緒程式設計。結構化併發加入了之前的六個功能,包括記錄模式、外國函式和記憶體API預覽,以及對開源Linux/RISC-V指令集架構(ISA)的支援。

根據正在進行的增強Java的計劃,JDK 19,或簡稱Java 19,有可能承載大量的功能,從通用泛型到價值物件。JDK 19將緊隨3月22日釋出的JDK 18。標準Java的釋出週期為6個月。

[也在InfoWorld上:JDK 18:Java 18的新內容 ]

OpenJDK的開發者已經發布了JDK 19的官方釋出時間表,它將於9月20日作為生產版本釋出,在此之前是6月9日和7月21日的縮減階段,以及8月11日和8月25日釋出的候選版本。

JDK 19的早期訪問版本可以從jdk.java.net/19訪問。擬議的JDK 19功能包括:

  • 結構化併發,處於孵化階段,旨在通過結構化併發庫簡化多執行緒程式設計。這種併發性將在不同執行緒中執行的多個任務視為一個工作單元,以簡化錯誤處理和取消。可靠性和可觀察性得到了改善。
  • 記錄模式的預覽,以解構記錄值。記錄模式和型別模式可以被巢狀,以實現資料導航和處理的宣告性、強大和可組合的形式。該提案的目標包括擴充套件模式匹配,以表達更復雜、可組合的資料查詢,同時不改變型別模式的語法或語義。該提案建立在2021年3月在JDK 16 中交付的instanceof 的模式匹配的基礎上。未來的計劃可能會要求將記錄模式擴充套件為陣列模式和vararg 模式等功能。記錄模式是Project Amber的一部分,該專案旨在探索和孵化較小的、面向生產力的Java功能。
  • 預覽外國函式和記憶體API,它將引入一個API,通過這個API,Java程式可以與Java執行時之外的程式碼和資料進行互操作。通過有效地呼叫外來函式(即Java執行時之外的程式碼)和安全地訪問外來記憶體(即不由JVM管理的記憶體),該API使Java程式能夠呼叫本地庫和處理本地資料,而沒有Java本地介面(JNI)的危險和脆性。國外函式和記憶體API結合了兩個早期的孵化API:國外記憶體訪問API和國外連結器API。國外函式和記憶體API曾在JDK 17中孵化,在JDK 18中重新孵化。該提案的目標包括易用性、效能、通用性和安全性。
  • 虛擬執行緒的預覽,這是一種輕量級的執行緒,大大減少了編寫、維護和觀察高吞吐量併發應用程式的工作量。目標包括:使以簡單的每請求執行緒風格編寫的伺服器應用程式能夠以接近最佳的硬體利用率進行擴充套件,使使用java.lang Thread API的現有程式碼能夠以最小的改動採用虛擬執行緒,並能夠使用現有的JDK工具對虛擬執行緒進行故障診斷、除錯和分析。本建議的目標不是改變Java的基本併發模型,也不是在Java語言或Java庫中提供新的資料並行結構。它的目標也不是刪除執行緒的傳統實現,或默默地將現有的應用程式遷移到使用虛擬執行緒。
  • 對switch表示式和語句的模式匹配的第三次預覽,將模式匹配擴充套件到switch ,允許一個表示式針對一些模式進行測試,每個模式都有一個特定的動作,因此可以簡明而安全地表達複雜的面向資料的查詢。這項功能以前在JDK 17和JDK 18中進行過預覽。第三次預覽將增加完善的內容,包括在switch 塊中用when 子句替換有防護的模式。另外,當選擇器表示式的值為null時,模式切換的執行時語義與傳統的switch 語義更加一致。該計劃的目標包括通過允許模式出現在案例標籤中來擴大switch 表示式和語句的表現力和適用性。其他目標包括允許開發者在需要時放寬switch 的歷史性空值,提高switch 語句的安全性,並確保現有的switch 表示式和語句在編譯時不會發生變化,並以相同的語義執行。
  • 第四個孵化的向量API,將表達向量計算,在執行時可靠地編譯為支援的CPU架構上的最佳向量指令,從而實現優於同等標量計算的效能。使用該API的開發者獲得了一種在Java中編寫複雜的向量演算法的方法,使用HotSpot自動向量器,但有一個使用者模型,使向量化更可預測和穩健。向量API先前已被納入JDK 16、JDK 17和JDK 19。
    為JDK 19提議的API改進包括增強向和從MemorySegments ,如外國函式和記憶體API預覽所定義。JDK 19還將增加兩個跨道向量操作,即壓縮和擴充套件,以及一個互補的向量掩碼壓縮操作。壓縮向量操作將由掩碼選擇的源向量的車道按車道順序對映到目標向量,而擴充套件操作則做相反的操作。壓縮操作在過濾查詢結果時非常有用。
    在向量API的另一個新增功能中,將擴充套件逐位積分的操作,包括計算1位元的數量、顛倒位元的順序,以及壓縮和擴充套件位元等操作。API的目標包括簡潔明瞭,與平臺無關,在x64和AArch64架構上具有可靠的執行和編譯效能,並實現 "優雅 "的退化,以應對向量計算在執行時不能完全表達為向量操作序列的情況。
  • 通過Linux/RISC-V的移植,Java將獲得對一個硬體指令集的支援,該指令集已經被廣泛的語言工具鏈所支援。RISC-V實際上是一個相關ISA的系列。Linux/RISC-V埠將只支援RISC-V的RV64GV配置,這是一個包括向量指令的通用64位ISA。Java的開發者可能會在將來考慮其他RISC-V的配置。

移植將支援以下HotSpot VM選項:模板直譯器、C1(客戶端)JIT編譯器、C2(伺服器)JIT編譯器,以及所有當前的主線垃圾收集器,包括ZGC和Shenandoah。實際的移植工作已接近完成;JDK 增強建議(JEP)的重點是將移植工作整合到 JDK 主線庫中。

與 JDK 18 一樣,JDK 19 也將是一個短期版本,只有六個月的頂級支援,即Premier支援。

之前的版本,JDK 17,是一個長期支援(LTS)版本,有幾年的支援期。