最近,Oracle發(fā)布了JDK20,相比對(duì)于Java開發(fā)者來說,JDK的發(fā)版是比較收關(guān)注的事情了,小簡也來和大家一起了解了解JDK20發(fā)生了什么變化呢?
首先,
JDK20是一個(gè)短周期版本,有6個(gè)月的維護(hù)時(shí)間,據(jù)開發(fā)者計(jì)劃,下一個(gè)LTS也就長期維護(hù)版本將會(huì)在2023年9月份發(fā)布到來,也就是JDK21了。

目前JDK21也是推出了早期預(yù)覽版本。

JDK 20 提供了來自 OpenJDK 項(xiàng)目 Amber 的語言改進(jìn)(Switch 的記錄模式和模式匹配),OpenJDK巴拿馬項(xiàng)目的增強(qiáng)功能,以互連Java虛擬機(jī)(JVM)和本機(jī)代碼(外部函數(shù)和內(nèi)存API和矢量API),以及與 Project Loom 相關(guān)的功能(作用域值、虛擬線程和結(jié)構(gòu)化并發(fā)),這些功能將大大簡化編寫、維護(hù)和觀察高吞吐量并發(fā)應(yīng)用程序的過程。
Oracle通過可預(yù)測的發(fā)布計(jì)劃每六個(gè)月發(fā)布一次新的Java功能。這種節(jié)奏提供了源源不斷的創(chuàng)新,同時(shí)不斷改進(jìn)平臺(tái)的性能、穩(wěn)定性和安全性,有助于提高Java在各種規(guī)模的組織和行業(yè)中的普遍性。
變化
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個(gè)JEP,已經(jīng)數(shù)百小功能點(diǎn)的變化。
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) |
看不懂英文沒關(guān)系,因?yàn)槲乙部床欢?,只是去官方網(wǎng)站上整理下來的資料,我們可以翻譯成中文再去查閱。

此段來自
程序員DD大佬文章:作用域值(Scoped Values)進(jìn)入孵化階段
引入
Scoped Values,它可以在線程內(nèi)和線程間共享不可變數(shù)據(jù)。它們優(yōu)于線程局部變量,尤其是在使用大量虛擬線程時(shí)。記錄模式 (Record Patterns) 進(jìn)入第 2 預(yù)覽階段
Record Patterns可對(duì)record的值進(jìn)行解構(gòu),Record patterns和Type patterns通過嵌套能夠實(shí)現(xiàn)強(qiáng)大的、聲明性的、可組合的數(shù)據(jù)導(dǎo)航和處理形式。switch 模式匹配 (Pattern Matching for switch) 進(jìn)入第 4 預(yù)覽階段
用
switch表達(dá)式和語句的模式匹配,以及對(duì)模式語言的擴(kuò)展來增強(qiáng)Java編程語言。將模式匹配擴(kuò)展到switch中,允許針對(duì)一些模式測試表達(dá)式,這樣就可以簡明而安全地表達(dá)復(fù)雜的面向數(shù)據(jù)的查詢。外部函數(shù)和內(nèi)存
API(Foreign Function & Memory API) 進(jìn)入第 2 預(yù)覽階段引入一個(gè)
API,通過它,Java程序可以與Java運(yùn)行時(shí)之外的代碼和數(shù)據(jù)進(jìn)行互操作。通過有效地調(diào)用外部函數(shù),以及安全地訪問外部內(nèi)存,該API使Java程序能夠調(diào)用本地庫并處理本地?cái)?shù)據(jù),而不會(huì)像JNI那樣有漏洞和危險(xiǎn)。虛擬線程 (Virtual Threads) 進(jìn)入第 2 預(yù)覽階段
為
Java引入虛擬線程,虛擬線程是JDK實(shí)現(xiàn)的輕量級(jí)線程,它在其他多線程語言中已經(jīng)被證實(shí)是十分有用的,比如Go中的Goroutine、Erlang中的進(jìn)程。虛擬線程避免了上下文切換的額外耗費(fèi),兼顧了多線程的優(yōu)點(diǎn),簡化了高并發(fā)程序的復(fù)雜,可以有效減少編寫、維護(hù)和觀察高吞吐量并發(fā)應(yīng)用程序的工作量。結(jié)構(gòu)化并發(fā) (Structured Concurrency) 進(jìn)入第 2 孵化階段
JDK 19引入了結(jié)構(gòu)化并發(fā),這是一種多線程編程方法,目的是為了通過結(jié)構(gòu)化并發(fā)API來簡化多線程編程,并不是為了取代java.util.concurrent。結(jié)構(gòu)化并發(fā)將不同線程中運(yùn)行的多個(gè)任務(wù)視為單個(gè)工作單元,從而簡化錯(cuò)誤處理、提高可靠性并增強(qiáng)可觀察性。也就是說,結(jié)構(gòu)化并發(fā)保留了單線程代碼的可讀性、可維護(hù)性和可觀察性。
向量 API (Vector API) 進(jìn)入第 5 孵化階段
向量計(jì)算由對(duì)向量的一系列操作組成。向量
API用來表達(dá)向量計(jì)算,該計(jì)算可以在運(yùn)行時(shí)可靠地編譯為支持的CPU架構(gòu)上的最佳向量指令,從而實(shí)現(xiàn)優(yōu)于等效標(biāo)量計(jì)算的性能。向量API的目標(biāo)是為用戶提供簡潔易用且與平臺(tái)無關(guān)的表達(dá)范圍廣泛的向量計(jì)算。
JDK21
計(jì)劃于 2023 年 9 月發(fā)布一個(gè) GA 和下一個(gè) LTS 版本,目前JDK 21的 Proposed to Target 有兩個(gè) JEP。
JEP 430,字符串模板(預(yù)覽版),一種 JEP 類型的特性,提議使用字符串模板來增強(qiáng) Java 編程語言,字符串模板類似于字符串字面量,但包含在運(yùn)行時(shí)合并到字符串模板中的嵌入式表達(dá)式。該特性已被歸類為 JDK 21 的 Proposed to Target,但尚未正式公布審查日期。
JEP 431,序列集合,提議引入“一個(gè)組能新表示集合概念的接口,這些集合的元素按照定義良好的序列或順序排列,作為集合的結(jié)構(gòu)屬性?!逼鋭?dòng)因是由于集合框架(Collections Framework)中缺乏定義良好的排序和統(tǒng)一操作集。該特性已被歸類為 JDK 21 的 Proposed to Target,但尚未正式公布審查日期。
然后在InfoQ中找到如下資料:
我們可以根據(jù)一些
JEP草案和候選者推測哪些額外的JEP有可能被納入JDK 21。由紅帽的杰出工程師 Andrew Haley 和 Andrew Dinn 提交的 JEP 草案 8303358,作用域值(預(yù)覽版)改進(jìn)了即將發(fā)布的 JDK 429 中提供的 JEP 20,作用域值(孵化器)。以前稱為范圍局部變量(孵化器),在 Project Loom 的支持下,此功能建議在線程內(nèi)和線程之間共享不可變數(shù)據(jù)。這優(yōu)先于線程局部變量,尤其是在使用大量虛擬線程時(shí)。雖然該草案尚未達(dá)到候選狀態(tài),但描述明確指出該 JEP 將添加到 JDK 21 中。
JEP草案8277163,Value Objects(預(yù)覽版)是Project Valhalla贊助的JEP的一項(xiàng)功能,它建議創(chuàng)建值對(duì)象 - 指定其實(shí)例行為的無標(biāo)識(shí)值類。此草案與 JEP 401,基元類(預(yù)覽版)相關(guān),該類仍處于候選狀態(tài)。
JEP 435,異步堆棧跟蹤 VM API,一種功能 JEP 類型,建議定義一個(gè)有效的 API,用于從信號(hào)處理程序獲取異步調(diào)用跟蹤,以便從具有 Java 和本機(jī)幀信息的信號(hào)處理程序進(jìn)行分析。
JEP 401,基元類(預(yù)覽版)在Valhalla項(xiàng)目的主持下,引入了開發(fā)人員聲明的基元類 - 特殊類型的值類 - 如上述值對(duì)象(預(yù)覽版)JEP草案中所定義 - 定義新的基元類型。
JEP草案8301034,密鑰封裝機(jī)制API是JEP類型的一種功能,建議:滿足標(biāo)準(zhǔn)密鑰封裝機(jī)制(KEM)算法的實(shí)現(xiàn);通過更高級(jí)別的安全協(xié)議滿足 KEM 的使用案例;并允許服務(wù)提供商插入 Java 或 KEM 算法的本機(jī)實(shí)現(xiàn)。此草案最近進(jìn)行了更新,包括一項(xiàng)重大更改,該更改刪除了
DerivedKeyParameterSpec類,轉(zhuǎn)而將字段放在封裝(int from, int to, String algorithm)方法的參數(shù)列表中。JEP 草案8283227,JDK 源代碼結(jié)構(gòu),一種信息性的 JEP 類型,描述了 JDK 存儲(chǔ)庫中 JDK 源代碼和相關(guān)文件的整體布局和結(jié)構(gòu)。本 JEP 建議幫助開發(fā)人員適應(yīng) JDK 201 中提供的 JEP 9 模塊化源代碼中所述的源代碼結(jié)構(gòu)。
JEP Draft 8280389,ClassFile API,建議提供一個(gè)用于解析、生成和轉(zhuǎn)換 Java 類文件的 API。該JEP最初將作為JDK中Java字節(jié)碼操作和分析框架ASM的內(nèi)部替代品,并計(jì)劃將其作為公共API開放。Oracle的Java語言架構(gòu)師Brian Goetz將ASM描述為“一個(gè)帶有大量遺留包袱的舊代碼庫”,并提供了有關(guān)該草案將如何演變并最終取代ASM的背景信息。
JEP 草案 8278252,
JDK打包和安裝指南,一個(gè)信息性的JEP,建議提供在macOS、Linux 和 Windows 上創(chuàng)建JDK安裝程序的指南,以降低不同JDK提供商在 JDK 安裝之間發(fā)生沖突的風(fēng)險(xiǎn)。其目的是通過正式化安裝目錄名稱、包名稱以及可能導(dǎo)致沖突的安裝程序的其他元素,在安裝JDK的更新發(fā)行版時(shí)提供更好的體驗(yàn)。我們預(yù)計(jì)
Oracle將很快開始為JDK 21提供更多的JEP。此段來自作者:
相關(guān)URL
甲骨文關(guān)于JDK20的發(fā)布新聞Oracle Releases Java 20 : www.oracle.com/news/announ…
OpenJDK的JDK20下載頁面:jdk.java.net/20/
OpenJDK的JDK21開發(fā)預(yù)覽版本下載頁面:jdk.java.net/21/
