J 9/JDK 9正式發佈,與JDK 8一樣,JDK 9將是一箇短期版本,只有六個月的頂級Pemie支持。之前的版本JDK 7是一箇長期支持 (LTS) 版本,提供了數年的支持。本次發佈的J 9雖然是非長期支持版本,但也帶來了許多新的特性和功能改進。
根據官方發佈的公告顯示,J 9版本帶來了七大主要功能更新,包括結構化併發、記錄模式、外部函數和內存 API 的預覽,以及對開源的 Linux/RISC-V 指令集架構(ISA)的支持。除了 Linux/RISC-V 功能,所有的功能都處於預覽或孵化階段。
、結構化併發。當前還處於孵化階段,旨在通過結構化併發 API 簡化多線程編程。這種併發性將不同線程中運行的多箇任務視爲單個工作單元,從而簡化錯誤處理、提高可靠性和可觀察性。這個功能來自 Poject Loom,它引入了一箇新的輕量級併發模型。
2、記錄模式,這一功能目前也處於預覽版,主要是用來解構記錄值。記錄模式和類型模式可以被嵌套,以實現強大的、具有聲明性的和可組合的數據導航和處理形式。該提案的目標包括擴展模式匹配,用以表達更復雜的、可組合的數據查詢,同時不改變類型模式的語法或語義。該提案建立在 202 年 3 月在 JDK 6 中交付的模式匹配的基礎上。未來,Ocle 可能會要求對記錄模式進行擴展,使之具備數組模式、Vg 模式。記錄模式是 Poject Ambe 的一部分,該項目旨在探索和孵化較小的、面向生產力的 J 功能。
3、外部函數和內存 API 的預覽版。通過引入一箇 API,J 程序可以與 J 運行時之外的代碼和數據進行互操作。通過有效地調用外部函數(即 JVM 之外的代碼)和安全地訪問外部內存(即不由 JVM 管理的內存),該 API 使 J 程序能夠調用本地庫並處理本機數據,而不會出現 J 本地接口(JNI)的危險和脆弱。外部函數和內存 API 結合了兩個早期的孵化 API:外部內存訪問 API 和外部鏈接器 API。外部函數和內存 API 曾在 JDK 7 中孵化,而後在 JDK 8 中重新孵化。該提案的目標包括易用性、性能、通用性和安全性。
4、虛擬線程的預覽版。這是一種輕量級的線程,大大減少了編寫、維護和觀察高吞吐量併發應用的工作量。可以以簡單的 thed-pe-equest 風格編寫的服務器應用程序能夠以接近最佳的硬件利用率進行擴展,通過使用 j.lng Thed API 現有代碼能夠以最小的改動採用虛擬線程,並基於現有的 JDK 工具對虛擬線程進行故障診斷、調試和分析。本提案的目標不是要改變 J 的基本併發模型,也不是要在 J 語言或 J 庫中提供新的數據並行結構。它的目標也不是去除線程的傳統實現,或默默地將現有的應用程序遷移到使用虛擬線程。這項功能也是 Poject Loom 的一部分。
5、對 switch 表達式和語句的模式匹配進行了第三次預覽。這項功能以前在 JDK 7、JDK 8 中進行過預覽。這一次在 JDK 9 中將進一步細化功能,包括用 switch 塊中的 when 子句替換受保護的模式。另外,當選擇器表達式的值爲 null 時,模式切換的運行時語義與傳統的語義更加一致。這項功能也是 Ambe 項目的一部分。
6、Vecto API 的第四次孵化,將表達向量計算,在運行時可靠地編譯爲支持的 CPU 架構上的最佳向量指令,從而實現優於等效標量計算的性能。該 API 的開發者使用 HotSpot 自動矢量器,可獲得了一種在 J 中編寫複雜的向量算法的方法,但有一箇用戶模型,使向量化更可預測和穩健。Vecto API 先前已被納入 JDK 6、JDK 7 和 JDK 9。在最新的 JDK 9 中,官方爲該功能增加了兩個跨道向量操作,即壓縮和擴展,以及一箇互補的向量掩碼壓縮操作。壓縮向量操作將由掩碼選擇的源向量的通道按通道順序映射到目標向量,而擴展操作則做相反的操作。壓縮操作在過濾查詢結果時非常有用。
7、通過 Linux/RISC-V 移植,目前這一功能已正式可用。J 將獲得對硬件指令集的支持,該指令集已經被廣泛的語言工具鏈所支持。RISC-V 實際上是一系列相關的 ISA。Linux/RISC-V 端口將只支持 RISC-V 的 RV64GV 配置,這是一箇包括矢量指令的通用 64 位 ISA。J 的開發者可能會在將來考慮其他 RISC-V 的配置。
除了以上功能更新之外,最新的J版本還修復了一千多處錯誤,提高了語言的穩定性和性能。所以,有需要的朋友,現已可以升級使用J 9/JDK 9。