將于 9 月發(fā)布的非 LTS 版本,Java 19 將具有結構化并發(fā)、虛擬線程、開關表達式的模式匹配、向量 API 和 Linux/RISC-V 端口。
JDK 19定于9月20日正式發(fā)布,供生產使用,在此之前,從7月21日開始是第二個夯實階段,8月11日和8月25日將發(fā)布候選版本。JDK 19的早期訪問版本可以從jdk.java.net/19訪問。JDK 19的功能包括。
結構化并發(fā)
處于孵化階段,旨在通過結構化并發(fā)庫簡化多線程編程。這種并發(fā)性將在不同線程中運行的多個任務視為一個工作單元,以簡化錯誤處理和取消??煽啃院涂捎^察性得到了改善。
記錄模式的預覽
為了解構記錄值。記錄模式和類型模式可以被嵌套,以實現(xiàn)數(shù)據(jù)導航和處理的聲明性、強大和可組合的形式。該提案的目標包括擴展模式匹配,以表達更復雜、可組合的數(shù)據(jù)查詢,同時不改變類型模式的語法或語義。該提案建立在實例的模式匹配基礎上,于2021年3月在JDK 16中交付。未來的計劃可能要求對記錄模式進行擴展,如數(shù)組模式和vararg模式。記錄模式是Project Amber的一部分,該項目旨在探索和孵化較小的、面向生產力的Java功能。
它將引入一個API,通過它,Java程序可以與Java運行時之外的代碼和數(shù)據(jù)進行互操作。通過有效地調用外來函數(shù)(即Java運行時之外的代碼)和安全地訪問外來內存(即不由JVM管理的內存),該API使Java程序能夠調用本地庫和處理本地數(shù)據(jù),而沒有Java本地接口(JNI)的危險和脆性。國外函數(shù)和內存API結合了兩個早期的孵化API:國外內存訪問API和國外鏈接器API。國外函數(shù)和內存API曾在JDK 17中孵化,在JDK 18中重新孵化。該提案的目標包括易用性、性能、通用性和安全性。
虛擬線程的預覽
這是一種輕量級的線程,大大減少了編寫、維護和觀察高吞吐量并發(fā)應用的工作量。目標包括:使以簡單的每請求線程風格編寫的服務器應用程序能夠以接近最佳的硬件利用率進行擴展,使使用java.lang Thread API的現(xiàn)有代碼能夠以最小的改動采用虛擬線程,并能夠使用現(xiàn)有的JDK工具對虛擬線程進行故障診斷、調試和分析。本建議的目標不是改變Java的基本并發(fā)模型,也不是在Java語言或Java庫中提供新的數(shù)據(jù)并行結構。它的目標也不是刪除線程的傳統(tǒng)實現(xiàn),或默默地將現(xiàn)有的應用程序遷移到使用虛擬線程。
switch表達式和語句的模式匹配第三次預覽
將模式匹配擴展到switch,以允許一個表達式針對一些模式進行測試,每個模式都有特定的動作,因此可以簡潔而安全地表達復雜的面向數(shù)據(jù)的查詢。這項功能以前在JDK 17和JDK 18中進行過預覽。第三次預覽將增加完善的內容,包括用開關塊中的when子句替換有防護的模式。另外,當選擇器表達式的值為空時,模式切換的運行時語義與傳統(tǒng)的切換語義更加一致。該計劃的目標包括通過允許模式出現(xiàn)在案例標簽中來擴大開關表達式和語句的表達能力和適用性。其他目標包括允許開發(fā)者在需要時放寬switch的歷史性null-hostility,增加switch語句的安全性,并確?,F(xiàn)有的switch表達式和語句在編譯時不做任何改變,并以相同的語義執(zhí)行。
第四次孵化的矢量API
用于表達矢量計算,在運行時可靠地編譯為支持的CPU架構上的最佳矢量指令,從而實現(xiàn)優(yōu)于同等標量計算的性能。使用該API的開發(fā)者獲得了一種在Java中編寫復雜的矢量算法的方法,使用HotSpot自動矢量器,但有一個用戶模型,使矢量化更可預測和穩(wěn)健。矢量API先前已被納入JDK 16、JDK 17和JDK 19。
為JDK 19提議的對API的改進包括增強對MemorySegments的加載和存儲矢量,如外國函數(shù)和內存API預覽所定義的。JDK 19還將增加兩個跨道矢量操作,即壓縮和擴展,以及一個互補的矢量掩碼壓縮操作。壓縮向量操作將由掩碼選擇的源向量的車道按車道順序映射到目標向量,而擴展操作則做相反的操作。壓縮操作在過濾查詢結果時非常有用。
在向量API的另一個新增功能中,將擴展逐位積分的操作,包括計算1比特的數(shù)量、顛倒比特的順序,以及壓縮和擴展比特等操作。API的目標包括簡潔明了,與平臺無關,在x64和AArch64架構上具有可靠的運行和編譯性能,并實現(xiàn) “優(yōu)雅 “的退化,以應對矢量計算在運行時不能完全表達為矢量操作序列的情況。
Linux/RISC-V 移植
Java將獲得對一個硬件指令集的支持,該指令集已經被廣泛的語言工具鏈所支持。RISC-V實際上是一個相關ISA的系列。Linux/RISC-V端口將只支持RISC-V的RV64GV配置,這是一個包括矢量指令的通用64位ISA。Java的開發(fā)者可能會在將來考慮其他RISC-V的配置。
原文鏈接:www.jdon.com/61084