作者 | Michael Redlich
譯者 | 平川
策劃 | 丁曉昀
Oracle 發(fā)布 JAVA 編程語言和虛擬機(jī)的第 21 個版本。這是自 2021 年 JDK 17 發(fā)布以來的第一個長期支持(LTS)版本。最終的特性集包括以下 15 個 JEP:
- JEP 430:字符串模板(預(yù)覽版)
- JEP 431:有序集合
- JEP 439:分代式 ZGC
- JEP 440:記錄模式
- JEP 441:switch 模式匹配
- JEP 442:外部函數(shù) & 內(nèi)存 API(第三個預(yù)覽版)
- JEP 443:未命名模式和變量(預(yù)覽版)
- JEP 444:虛擬線程
- JEP 445:未命名類和實例的 MAIn 方法(預(yù)覽版)
- JEP 446:作用域值(預(yù)覽版)
- JEP 448:向量 API(第六輪孵化)
- JEP 449:棄用 windows 32-bit x86 移植,為刪除做準(zhǔn)備
- JEP 451:準(zhǔn)備禁用代理的動態(tài)加載
- JEP 452:密鑰封裝機(jī)制 API
- JEP 453:結(jié)構(gòu)化并發(fā)(預(yù)覽版)
其中有三個——虛擬線程、記錄模式和 switch 模式匹配——已經(jīng)完成了各自的預(yù)覽,現(xiàn)已最終確定。
如下圖所示,JDK 21 的特性開發(fā)節(jié)奏和前兩個 LTS 版本(即 JDK 17 和 JDK 11)以及以前其他的 JDK 版本類似。
Azul 副首席執(zhí)行官 Simon Ritter 告訴 InfoQ:
JDK 21 將是 OpenJDK 發(fā)行版的下一個長期支持(LTS)版本。這一點很重要,因為許多企業(yè)用戶在生產(chǎn)環(huán)境中都只使用這樣的版本。長遠(yuǎn)來看,將會有大量的用戶采用。然而,大部分用戶在部署前會等待 6 到 12 個月,以便新特性可以經(jīng)歷更多真實世界的測試,發(fā)現(xiàn)的 Bug 得以修復(fù)。
JDK 21 包含了許多新特性,涵蓋了平臺的各個方面:語言、庫、JVM 和工具。
JDK 21 最突出的特性也許是虛擬線程,它從預(yù)覽特性變成了完整特性。對于使用一請求一線程模型的應(yīng)用程序來說,這是提高性能和可擴(kuò)展性的理想選擇,因為線程在等待 IO 上花費了大量的時間。作為 Loom 項目的一部分,開發(fā)人員對這個特性可謂期待已久。
對于開發(fā)人員,該版本提供了各種與模式匹配有關(guān)的語言級特性。記錄模式和 switch 模式匹配都成了完整特性。還有一個小而強(qiáng)大的特性是未命名模式和變量。向量 API(用于數(shù)值密集型計算)和外部函數(shù) & 內(nèi)存 API(Panama 項目的一部分)將繼續(xù)以孵化器的形式開發(fā)。
看下自 JDK 17 以來的新特性總表就會知道,這個新的 Java LTS 版本對開發(fā)人員和最終用戶將會很有吸引力。
下面我們將進(jìn)一步探討下其中的一些 JEP,提供一些 JDK 21 的資源,并預(yù)測下 JDK 22 中可能包含哪些特性。
虛擬線程
JEP 444(虛擬線程)根據(jù)前兩輪預(yù)覽的反饋最終確定了這個特性:JEP 436(虛擬線程第二次預(yù)覽)在 JDK 20 中交付;JEP 425(虛擬線程第一次預(yù)覽)在 JDK 19 中交付。該特性為 Java 平臺提供了虛擬線程。這種輕量級的線程可以顯著減少編寫、維護(hù)和觀測高吞吐量并發(fā)應(yīng)用程序的工作量。JEP 436 最重要的變化是,虛擬線程現(xiàn)在完全支持線程本地變量,取消了不使用這些變量的選項。要了解關(guān)于 JEP 444 的更多細(xì)節(jié),可以閱讀 InfoQ 的這篇新聞報道以及 José Paumard(Oracle Java 平臺組 Java 開發(fā)大使)提供的 JEP Café截屏視頻。
記錄模式
在 Amber 項目的支持下,JEP 440(記錄模式)最終確定了這一特性,并根據(jù)前兩輪預(yù)覽的反饋進(jìn)行了增強(qiáng):JEP 432(記錄模式第二次預(yù)覽)在 JDK 20 中交付;JEP 405(記錄模式第一次預(yù)覽)在 JDK 19 中交付。該特性通過記錄模式增強(qiáng)了語言解構(gòu)記錄值的能力。記錄模式可以與類型模式結(jié)合使用,以“實現(xiàn)強(qiáng)大的聲明式可組合數(shù)據(jù)導(dǎo)航和處理形式”。最近,類型模式通過 JEP 420(switch 模式匹配第二次預(yù)覽,在 JDK 18 中交付)和 JEP 406(switch 模式匹配第一次預(yù)覽,在 JDK 17 中交付)進(jìn)行了擴(kuò)展,已可用于 switchcase 標(biāo)簽。JEP 432 最重要的變化是刪除了在增強(qiáng)型 for 語句頭中使用記錄模式的支持。要了解關(guān)于 JEP 440 的更多細(xì)節(jié),可以閱讀 InfoQ 的這篇新聞報道。
Switch 模式匹配
也是在 Amber 項目的支持下,JEP 441(switch 模式匹配)最終確定了這個特性,并根據(jù)前四輪預(yù)覽的反饋進(jìn)行了增強(qiáng):JEP 433(switch 模式匹配第四次預(yù)覽)在 JDK 20 中交付;JEP 427(switch 模式匹配第三次預(yù)覽)在 JDK 19 中交付;JEP 420(switch 模式匹配第二次預(yù)覽)在 JDK 18 中交付;JEP 406(switch 模式匹配第一次預(yù)覽)在 JDK 17 中交付。該特性通過在 switch 表達(dá)式和語句中使用模式匹配增強(qiáng)了該語言。要了解關(guān)于 JEP 441 的更多細(xì)節(jié),可以閱讀 InfoQ 的這篇新聞報道。
未命名類和實例的 Main 方法(預(yù)覽)
JEP 445(未命名類和實例的 Main 方法預(yù)覽)之前稱為靈活的 Main 方法和匿名 Main 類(預(yù)覽)和隱式類與增強(qiáng) Main 方法(預(yù)覽)。它提出“改進(jìn) Java 語言,使學(xué)生可以編寫他們的第一個程序,而不需要了解為大型程序設(shè)計的語言特性。”該 JEP 延續(xù)了 Oracle Java 語言架構(gòu)師 Brian Goetz 在 2022 年 9 月發(fā)表的博文 Paving the on-ramp。Oracle 技術(shù)顧問 Gavin Bierman 已經(jīng)發(fā)布了規(guī)范文檔的初稿供 Java 社區(qū)審查。要了解關(guān)于 JEP 445 的更多細(xì)節(jié),可以閱讀 InfoQ 的這篇新聞報道。
RoadTo21
Java 開發(fā)關(guān)系團(tuán)隊——Billy Korando、Ana-Maria Mihalceanu、José Paumard 和 Nicolai Parlog——提供了一系列時長約 20 分鐘的視頻教程,代號為 #RoadTo21,其中介紹了更多關(guān)于 JDK 21 特性的細(xì)節(jié):
- Java 21 帶來了完整的模式匹配,由 Parlog 提供
- Java 21 安全性,由 Mihalceanu 提供
- Java 21 API 變化,由 Paumard 提供
- Java 21 工具增強(qiáng):全面改進(jìn),由 Mihalceanu 提供
- Java 21 JVM 和 GC 改進(jìn),由 Korando 提供
- Java 21 新特性:虛擬線程,由 Paumard 提供
- 從 Java 17 升級到 Java 21,由 Parlog 提供
JDK 21 發(fā)布會
JDK 21 發(fā)布會于 2023 年 9 月 19 日 UTC 時間 13:00-21:00 進(jìn)行了直播,由 Parlog、Mihalceanu 和 Korando 主持。這次活動邀請了眾多嘉賓,并進(jìn)行了 Java First Java Always 專題討論,探討 JDK 21 的特性。整個過程在拉斯維加斯的 Oracle CloudWorld 進(jìn)行了實況直播。
專題討論小組的成員包括:Oracle 開發(fā)關(guān)系高級總監(jiān) Sharat Chander、Oracle Java 平臺組軟件開發(fā)高級副總裁 Georges Saab;Oracle 開發(fā)關(guān)系副總裁 Chad Arimura;Oracle 編程語言設(shè)計師 Daniel Smith。
該小組發(fā)布了四份公告:一個新的 Java Playground,基于 JShell 實用程序,可用于編寫和執(zhí)行 Java 代碼;Java 社區(qū)現(xiàn)在可以向 dev.java 網(wǎng)站提供內(nèi)容了;一個新的 Java Developer Relations Github 存儲庫;JDK 11 將至少支持到 2032 年。
JDK 22
目前,JDK 22 中會包含哪些 JEP 尚不確定。但是,根據(jù)最近提交的 JEP 草案和建議最終某項特性的 JEP 候選,我們已經(jīng)可以推測出哪些 JEP 有可能包含在 JDK 22 中。
JEP 454(外部函數(shù) & 內(nèi)存 API)建議在兩輪孵化和三輪預(yù)覽后最終確定該特性:JEP 412(外部函數(shù) & 內(nèi)存 API 第一輪孵化)在 JDK 17 中交付;JEP 419(外部函數(shù) & 內(nèi)存 API 第二輪孵化)在 JDK 18 中交付;JEP 424(外部函數(shù) & 內(nèi)存 API 第一次預(yù)覽)在 JDK 19 中交付;JEP 434(外部函數(shù) & 內(nèi)存 API 第二次預(yù)覽)在 JDK 20 中交付;JEP 442(外部函數(shù) & 內(nèi)存 API 第三次預(yù)覽)將在即將發(fā)布的 JDK 21 GA 版本中交付。自上一個版本以來的改進(jìn)包括:新增清單屬性 Enable-Native-Access,使可執(zhí)行 JAR 文件中的代碼可以調(diào)用受限方法,而無需使用 --enable-native-access 標(biāo)識;允許客戶端以編程方式構(gòu)建 C 函數(shù)描述符,避免使用特定于平臺的常量;改進(jìn)對本地內(nèi)存可變長數(shù)組的支持;在本地字符串中支持多字符集。
在 Panama 項目的支持下,JEP 草案 8315945(向量 API 第七輪孵化)包含了針對前六輪孵化反饋的增強(qiáng):JEP 448(向量 API 第六輪孵化)將在即將發(fā)布的 JDK 21 GA 版本中交付;JEP 438(向量 API 第五輪孵化)在 JDK 20 中交付;JEP 426(向量 API 第四輪孵化)在 JDK 19 中交付;JEP 417(向量 API 第三輪孵化)在 JDK 18 中交付;JEP 414(向量 API 第二輪孵化)在 JDK 17 中交付;JEP 338(向量 API 第一輪孵化)在 JDK 16 中作為孵化器模塊交付。JEP 448 最重要的變化包括增強(qiáng) JVM 編譯器接口(JVMCI)以支持向量 API 值。
JEP 草案 8277163(值對象預(yù)覽)建議創(chuàng)建值對象,它們是無標(biāo)識值類,用于指定其實例的行為。該草案與 JEP 401(空限制值對象存儲預(yù)覽)相關(guān),并將繼續(xù)為實現(xiàn) Valhalla 項目做出貢獻(xiàn)。
Daniel Smith 是 Oracle 的編程語言設(shè)計師。他更新了 JEP 401(空限制值對象存儲預(yù)覽),以便與 Oracle 的最新設(shè)計思想“在語言和類文件中表達(dá)扁平化(flattenability)”保持一致。該提案最初名為 Primitive Classes(預(yù)覽版),支持值對象(見 JEP Draft 8277163)的空限制存儲,即在字段和數(shù)組組件中將它們初始化為類的初始實例,并拒絕空值寫入嘗試。
JEP 草案 8311828(未命名模式和變量)建議在上一輪預(yù)覽的基礎(chǔ)上最終確定該特性:JEP 443(未命名模式和變量預(yù)覽)在 JDK 21 中交付。這個 JEP 將“使用未命名模式(可以匹配記錄組件,而不需要說明組件的名稱或類型)和未命名變量(可以初始化,但不能使用)來增強(qiáng)語言。”兩者都用下劃線字符表示,如 r instanceof _(int x, int y) 和 r instanceof _。
根據(jù) Oracle Java 平臺組首席架構(gòu)師 Mark Reinhold 的建議,JDK 22 的正式發(fā)布日期暫定為 2024 年 3 月 19 日。其特性預(yù)計將于 2023 年 12 月初凍結(jié)。要了解關(guān)于其他 JEP 草案和候選的更多細(xì)節(jié),可以閱讀 InfoQ 的這篇詳細(xì)報道。
JDK 21 現(xiàn)在已經(jīng)可以從 Oracle 官網(wǎng)上下載,其他供應(yīng)商的二進(jìn)制文件預(yù)計也將很快提供。
原文鏈接:
https://www.infoq.com/news/2023/09/java21-released/