Java 20正式發(fā)布!聽說超神了?
這一版本是在 Oracle 將 Java 發(fā)布周期改為六個月之后上線的第 11 個功能版本,如今可在 Oracle 網(wǎng)站直接下載使用(https://www.oracle.com/java/)。

JDK 20 是一個短期維護(hù)版本,將獲得六個月的支持。盡管如此,但它仍然可用于生產(chǎn)環(huán)境中。根據(jù)開發(fā)計劃,下一個 LTS 版本就是將于 2023 年 9 月發(fā)布的 JDK 21。

Java 20?包含了許多新的特性和改進(jìn)。根據(jù) Oracle 官方透露,在 Java 20?中,在標(biāo)記為固定的 2314 個 JIRA 問題中,1595 個是由甲骨文完成的,而 719 個是由 Java 社區(qū)的其他成員貢獻(xiàn)的。其中國內(nèi)的阿里巴巴、華為、騰訊都有不少的貢獻(xiàn)。

有人說,這版本號簡直超神了。。此版本包括 7 個 JEP(都處于不同的孵化和預(yù)覽階段),以及數(shù)百個較小的功能增強(qiáng)和數(shù)千個錯誤修復(fù):429:Scoped Values (Incubator)432:Record Patterns (Second Preview)433:Pattern Matching for switch (Fourth Preview)434:Foreign Function & Memory API (Second Preview)436:Virtual Threads (Second Preview)437:Structured Concurrency (Second Incubator)438:Vector API (Fifth Incubator)
接下來,我們將介紹 Java 20 的一些重要新特性,以幫助 Java 開發(fā)者更好地了解這個版本。
整體而言,JDK 20 引入了七種新功能,這些功能當(dāng)前處于孵化或預(yù)覽階段,具體如下:
作用域值(Scoped Values)進(jìn)入孵化階段
引入 Scoped Values,它可以在線程內(nèi)和線程間共享不可變數(shù)據(jù)。它們優(yōu)于線程局部變量,尤其是在使用大量虛擬線程時。
記錄模式 (Record Patterns) 進(jìn)入第 2 預(yù)覽階段
Record Patterns 可對 record 的值進(jìn)行解構(gòu),Record patterns 和 Type patterns 通過嵌套能夠?qū)崿F(xiàn)強(qiáng)大的、聲明性的、可組合的數(shù)據(jù)導(dǎo)航和處理形式。
switch 模式匹配 (Pattern Matching for switch) 進(jìn)入第 4 預(yù)覽階段
用 switch 表達(dá)式和語句的模式匹配,以及對模式語言的擴(kuò)展來增強(qiáng) Java 編程語言。將模式匹配擴(kuò)展到 switch 中,允許針對一些模式測試表達(dá)式,這樣就可以簡明而安全地表達(dá)復(fù)雜的面向數(shù)據(jù)的查詢。
外部函數(shù)和內(nèi)存 API (Foreign Function & Memory API) 進(jìn)入第 2 預(yù)覽階段
引入一個 API,通過它,Java 程序可以與 Java 運行時之外的代碼和數(shù)據(jù)進(jìn)行互操作。通過有效地調(diào)用外部函數(shù),以及安全地訪問外部內(nèi)存,該 API 使 Java 程序能夠調(diào)用本地庫并處理本地數(shù)據(jù),而不會像 JNI 那樣有漏洞和危險。
虛擬線程 (Virtual Threads) 進(jìn)入第 2 預(yù)覽階段
為 Java 引入虛擬線程,虛擬線程是 JDK 實現(xiàn)的輕量級線程,它在其他多線程語言中已經(jīng)被證實是十分有用的,比如 Go 中的 Goroutine、Erlang 中的進(jìn)程。虛擬線程避免了上下文切換的額外耗費,兼顧了多線程的優(yōu)點,簡化了高并發(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ā)將不同線程中運行的多個任務(wù)視為單個工作單元,從而簡化錯誤處理、提高可靠性并增強(qiáng)可觀察性。也就是說,結(jié)構(gòu)化并發(fā)保留了單線程代碼的可讀性、可維護(hù)性和可觀察性。
向量 API (Vector API) 進(jìn)入第 5 孵化階段
向量計算由對向量的一系列操作組成。向量 API 用來表達(dá)向量計算,該計算可以在運行時可靠地編譯為支持的 CPU 架構(gòu)上的最佳向量指令,從而實現(xiàn)優(yōu)于等效標(biāo)量計算的性能。向量 API 的目標(biāo)是為用戶提供簡潔易用且與平臺無關(guān)的表達(dá)范圍廣泛的向量計算。