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