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)版本,有幾年的支持期。