JDK20正式發佈了GA版本,短期維護支持,以及JDK21預覽

最近,Oracle發佈了JDK20,相比對於Java開發者來說,JDK的發版是比較收關注的事情了,小簡也來和大家一起了解了解JDK20發生了什麼變化呢?

首先,JDK20是一個短週期版本,有6個月的維護時間,據開發者計劃,下一個LTS也就長期維護版本將會在2023年9月份發佈到來,也就是JDK21了。

目前JDK21也是推出了早期預覽版本。

JDK 20 提供了來自 OpenJDK 項目 Amber 的語言改進(Switch 的記錄模式和模式匹配),OpenJDK巴拿馬項目的增強功能,以互連Java虛擬機(JVM)和本機代碼(外部函數和內存API和矢量API),以及與 Project Loom 相關的功能(作用域值、虛擬線程和結構化併發),這些功能將大大簡化編寫、維護和觀察高吞吐量併發應用程序的過程

Oracle 通過可預測的發佈計劃每六個月發佈一次新的 Java 功能。這種節奏提供了源源不斷的創新,同時不斷改進平臺的性能、穩定性和安全性,有助於提高 Java 在各種規模的組織和行業中的普遍性。

變化

Language Updates and Improvements

  • JEP 432: Record Patterns (Second Preview): Enhances the Java language by allowing users to nest record patterns and type patterns to create a powerful, declarative, and composable form of data navigation and processing. This helps increase developer productivity by enabling them to extend pattern matching to allow for more sophisticated and composable data queries.
  • JEP 433: Pattern Matching for Switch (Fourth Preview): By extending pattern matching to switch, an expression can be tested against a number of patterns—each with a specific action—so that complex data-oriented queries can be expressed concisely and safely. Expanding the expressiveness and applicability of switch expressions and statements helps increase developer productivity.

Project Loom Preview/Incubator Features

  • JEP 429: Scoped Values (Incubator): Enables the sharing of immutable data within and across threads, which are preferred to thread-local variables – especially when using large numbers of virtual threads. This increases ease-of-use, comprehensibility, robustness, and performance.
  • JEP 436: Virtual Threads (Second Preview): Significantly streamline the process of writing, maintaining, and observing high-throughput, concurrent applications by introducing lightweight virtual threads to the Java Platform. By enabling developers to easily troubleshoot, debug, and profile concurrent applications with existing JDK tools and techniques, virtual threads helps accelerate application development.
  • JEP 437: Structured Concurrency (Second Incubator): Simplifies multithreaded programming by treating multiple tasks running in different threads as a single unit of work. This helps development teams streamline error handling and cancellation, improve reliability, and enhance observability.

Project Panama Preview Features

  • JEP 434: Foreign Function & Memory API (Second Preview): Enables Java programs to interoperate with code and data outside of the Java runtime. By efficiently invoking foreign functions (i.e., code outside the Java Virtual Machine [JVM]), and by safely accessing foreign memory (i.e., memory not managed by the JVM), this feature enables Java programs to call native libraries and process native data without requiring the Java Native Interface. This increases ease-of-use, performance, and safety.
  • JEP 438: Vector API (Fifth Incubator): Expresses vector computations that reliably compile at runtime to vector instructions on supported CPU architectures. This increases performance compared to equivalent scalar computations.

JDK20包含7個JEP,已經數百小功能點的變化。

JEP

JEP Language Updates and Improvements
432 Record Patterns (Second Preview)
433 Pattern Matching for Switch (Fourth Preview)
429 Scoped Values (Incubator)
436 Virtual Threads (Second Preview)
437 Structured Concurrency (Second Incubator)
434 Foreign Function & Memory API (Second Preview)
438 Vector API (Fifth Incubator)

看不懂英文沒關係,因爲我也看不懂,只是去官方網站上整理下來的資料,我們可以翻譯成中文再去查閱。

此段來自程序員DD大佬文章:

作用域值(Scoped Values)進入孵化階段

引入 Scoped Values,它可以在線程內和線程間共享不可變數據它們優於線程局部變量,尤其是在使用大量虛擬線程時。

記錄模式 (Record Patterns) 進入第 2 預覽階段

Record Patterns 可對 record 的值進行解構,Record patternsType patterns 通過嵌套能夠實現強大的、聲明性的、可組合的數據導航和處理形式

switch 模式匹配 (Pattern Matching for switch) 進入第 4 預覽階段

switch 表達式和語句的模式匹配,以及對模式語言的擴展來增強 Java 編程語言。將模式匹配擴展到 switch 中,允許針對一些模式測試表達式,這樣就可以簡明而安全地表達複雜的面向數據的查詢。

外部函數和內存 API (Foreign Function & Memory API) 進入第 2 預覽階段

引入一個 API,通過它,Java 程序可以與 Java 運行時之外的代碼和數據進行互操作。通過有效地調用外部函數,以及安全地訪問外部內存,該 API 使 Java 程序能夠調用本地庫並處理本地數據,而不會像 JNI 那樣有漏洞和危險。

虛擬線程 (Virtual Threads) 進入第 2 預覽階段

Java 引入虛擬線程,虛擬線程是 JDK 實現的輕量級線程,它在其他多線程語言中已經被證實是十分有用的,比如 Go 中的 GoroutineErlang 中的進程。虛擬線程避免了上下文切換的額外耗費,兼顧了多線程的優點,簡化了高併發程序的複雜,可以有效減少編寫、維護和觀察高吞吐量併發應用程序的工作量

結構化併發 (Structured Concurrency) 進入第 2 孵化階段

JDK 19 引入了結構化併發,這是一種多線程編程方法,目的是爲了通過結構化併發 API 來簡化多線程編程,並不是爲了取代 java.util.concurrent

結構化併發將不同線程中運行的多個任務視爲單個工作單元,從而簡化錯誤處理、提高可靠性並增強可觀察性。也就是說,結構化併發保留了單線程代碼的可讀性、可維護性和可觀察性。

向量 API (Vector API) 進入第 5 孵化階段

向量計算由對向量的一系列操作組成。向量 API 用來表達向量計算,該計算可以在運行時可靠地編譯爲支持的 CPU 架構上的最佳向量指令,從而實現優於等效標量計算的性能。向量 API 的目標是爲用戶提供簡潔易用且與平臺無關的表達範圍廣泛的向量計算。

JDK21

計劃於 2023 年 9 月發佈一個 GA 和下一個 LTS 版本,目前JDK 21Proposed to Target 有兩個 JEP

JEP 430,字符串模板(預覽版),一種 JEP 類型的特性,提議使用字符串模板來增強 Java 編程語言,字符串模板類似於字符串字面量,但包含在運行時合併到字符串模板中的嵌入式表達式。該特性已被歸類爲 JDK 21Proposed to Target,但尚未正式公佈審查日期。

JEP 431,序列集合,提議引入“一個組能新表示集合概念的接口,這些集合的元素按照定義良好的序列或順序排列,作爲集合的結構屬性。”其動因是由於集合框架(Collections Framework)中缺乏定義良好的排序和統一操作集。該特性已被歸類爲 JDK 21Proposed to Target,但尚未正式公佈審查日期。

然後在InfoQ中找到如下資料:

我們可以根據一些JEP草案和候選者推測哪些額外的JEP有可能被納入JDK 21

由紅帽的傑出工程師 Andrew HaleyAndrew Dinn 提交的 JEP 草案 8303358,作用域值(預覽版)改進了即將發佈的 JDK 429 中提供的 JEP 20,作用域值(孵化器)。以前稱爲範圍局部變量(孵化器),Project Loom 的支持下,此功能建議在線程內和線程之間共享不可變數據。這優先於線程局部變量,尤其是在使用大量虛擬線程時。雖然該草案尚未達到候選狀態,但描述明確指出該 JEP 將添加到 JDK 21 中。

JEP草案8277163Value Objects(預覽版)是Project Valhalla贊助的JEP的一項功能,它建議創建值對象 - 指定其實例行爲的無標識值類。此草案與 JEP 401,基元類(預覽版)相關,該類仍處於候選狀態。

JEP 435,異步堆棧跟蹤 VM API,一種功能 JEP 類型,建議定義一個有效的 API,用於從信號處理程序獲取異步調用跟蹤,以便從具有 Java 和本機幀信息的信號處理程序進行分析。

JEP 401,基元類(預覽版)在Valhalla項目的主持下,引入了開發人員聲明的基元類 - 特殊類型的值類 - 如上述值對象(預覽版)JEP草案中所定義 - 定義新的基元類型。

JEP草案8301034密鑰封裝機制API是JEP類型的一種功能,建議:滿足標準密鑰封裝機制(KEM)算法的實現;通過更高級別的安全協議滿足 KEM 的使用案例;並允許服務提供商插入 Java 或 KEM 算法的本機實現。此草案最近進行了更新,包括一項重大更改,該更改刪除了 DerivedKeyParameterSpec 類,轉而將字段放在封裝(int from, int to, String algorithm) 方法的參數列表中。

JEP 草案8283227,JDK 源代碼結構,一種信息性的 JEP 類型,描述了 JDK 存儲庫中 JDK 源代碼和相關文件的整體佈局和結構。本 JEP 建議幫助開發人員適應 JDK 201 中提供的 JEP 9 模塊化源代碼中所述的源代碼結構。

JEP Draft 8280389ClassFile API,建議提供一個用於解析、生成和轉換 Java 類文件的 API。該JEP最初將作爲JDK中Java字節碼操作和分析框架ASM的內部替代品,並計劃將其作爲公共API開放。Oracle的Java語言架構師Brian Goetz將ASM描述爲“一個帶有大量遺留包袱的舊代碼庫”,並提供了有關該草案將如何演變並最終取代ASM的背景信息。

JEP 草案 8278252JDK 打包和安裝指南,一個信息性的 JEP,建議提供在 macOS、Linux 和 Windows 上創建 JDK 安裝程序的指南,以降低不同 JDK 提供商在 JDK 安裝之間發生衝突的風險。其目的是通過正式化安裝目錄名稱、包名稱以及可能導致衝突的安裝程序的其他元素,在安裝 JDK 的更新發行版時提供更好的體驗。

我們預計Oracle將很快開始爲JDK 21提供更多的JEP

此段來自作者:

相關URL

甲骨文關於JDK20的發佈新聞Oracle Releases Java 20 : www.oracle.com/news/announ…

OpenJDKJDK20下載頁面:jdk.java.net/20/

OpenJDKJDK21開發預覽版本下載頁面:jdk.java.net/21/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章