Java 21:下一個LTS版本,提供了虛擬線程、記錄模式和模式匹配

2023-09-27     InfoQ

原標題:Java 21:下一個LTS版本,提供了虛擬線程、記錄模式和模式匹配

作者 | Michael Redlich

譯者 | 平川

策劃 | 丁曉昀

Oracle 發布 Java 程式語言和虛擬機的第 21 個版本。這是自 2021 年 JDK 17 發布以來的第一個長期支持(LTS)版本。最終的特性集包括以下 15 個 JEP:

  • JEP 430:字符串模板(預覽版)
  • JEP 431:有序集合
  • JEP 439:分代式 ZGC
  • JEP 440:記錄模式
  • JEP 441:switch 模式匹配
  • JEP 442:外部函數 & 內存 API(第三個預覽版)
  • JEP 443:未命名模式和變量(預覽版)
  • JEP 444:虛擬線程
  • JEP 445:未命名類和實例的 Main 方法(預覽版)
  • JEP 446:作用域值(預覽版)
  • JEP 448:向量 API(第六輪孵化)
  • JEP 449:棄用 Windows 32-bit x86 移植,為刪除做準備
  • JEP 451:準備禁用代理的動態加載
  • JEP 452:密鑰封裝機制 API
  • JEP 453:結構化並發(預覽版)

其中有三個——虛擬線程、記錄模式和 switch 模式匹配——已經完成了各自的預覽,現已最終確定。

如下圖所示,JDK 21 的特性開發節奏和前兩個 LTS 版本(即 JDK 17 和 JDK 11)以及以前其他的 JDK 版本類似。

Azul 副執行長 Simon Ritter 告訴 InfoQ:

JDK 21 將是 OpenJDK 發行版的下一個長期支持(LTS)版本。這一點很重要,因為許多企業用戶在生產環境中都只使用這樣的版本。長遠來看,將會有大量的用戶採用。然而,大部分用戶在部署前會等待 6 到 12 個月,以便新特性可以經歷更多真實世界的測試,發現的 Bug 得以修復。

JDK 21 包含了許多新特性,涵蓋了平台的各個方面:語言、庫、JVM 和工具。

JDK 21 最突出的特性也許是虛擬線程,它從預覽特性變成了完整特性。對於使用一請求一線程模型的應用程式來說,這是提高性能和可擴展性的理想選擇,因為線程在等待 IO 上花費了大量的時間。作為 Loom 項目的一部分,開發人員對這個特性可謂期待已久。

對於開發人員,該版本提供了各種與模式匹配有關的語言級特性。記錄模式和 switch 模式匹配都成了完整特性。還有一個小而強大的特性是未命名模式和變量。向量 API(用於數值密集型計算)和外部函數 & 內存 API(Panama 項目的一部分)將繼續以孵化器的形式開發。

看下自 JDK 17 以來的新特性總表就會知道,這個新的 Java LTS 版本對開發人員和最終用戶將會很有吸引力。

JDK 21 將是 OpenJDK 發行版的下一個長期支持(LTS)版本。這一點很重要,因為許多企業用戶在生產環境中都只使用這樣的版本。長遠來看,將會有大量的用戶採用。然而,大部分用戶在部署前會等待 6 到 12 個月,以便新特性可以經歷更多真實世界的測試,發現的 Bug 得以修復。

JDK 21 包含了許多新特性,涵蓋了平台的各個方面:語言、庫、JVM 和工具。

JDK 21 最突出的特性也許是虛擬線程,它從預覽特性變成了完整特性。對於使用一請求一線程模型的應用程式來說,這是提高性能和可擴展性的理想選擇,因為線程在等待 IO 上花費了大量的時間。作為 Loom 項目的一部分,開發人員對這個特性可謂期待已久。

對於開發人員,該版本提供了各種與模式匹配有關的語言級特性。記錄模式和 switch 模式匹配都成了完整特性。還有一個小而強大的特性是未命名模式和變量。向量 API(用於數值密集型計算)和外部函數 & 內存 API(Panama 項目的一部分)將繼續以孵化器的形式開發。

看下自 JDK 17 以來的新特性總表就會知道,這個新的 Java LTS 版本對開發人員和最終用戶將會很有吸引力。

下面我們將進一步探討下其中的一些 JEP,提供一些 JDK 21 的資源,並預測下 JDK 22 中可能包含哪些特性。

虛擬線程

JEP 444(虛擬線程)根據前兩輪預覽的反饋最終確定了這個特性:JEP 436(虛擬線程第二次預覽)在 JDK 20 中交付;JEP 425(虛擬線程第一次預覽)在 JDK 19 中交付。該特性為 Java 平台提供了虛擬線程。這種輕量級的線程可以顯著減少編寫、維護和觀測高吞吐量並發應用程式的工作量。JEP 436 最重要的變化是,虛擬線程現在完全支持線程本地變量,取消了不使用這些變量的選項。要了解關於 JEP 444 的更多細節,可以閱讀 InfoQ 的這篇新聞報道以及 José Paumard(Oracle Java 平台組 Java 開發大使)提供的 JEP Café截屏視頻。

記錄模式

在 Amber 項目的支持下,JEP 440(記錄模式)最終確定了這一特性,並根據前兩輪預覽的反饋進行了增強:JEP 432(記錄模式第二次預覽)在 JDK 20 中交付;JEP 405(記錄模式第一次預覽)在 JDK 19 中交付。該特性通過記錄模式增強了語言解構記錄值的能力。記錄模式可以與類型模式結合使用,以「實現強大的聲明式可組合數據導航和處理形式」。最近,類型模式通過 JEP 420(switch 模式匹配第二次預覽,在 JDK 18 中交付)和 JEP 406(switch 模式匹配第一次預覽,在 JDK 17 中交付)進行了擴展,已可用於 switchcase 標籤。JEP 432 最重要的變化是刪除了在增強型 for 語句頭中使用記錄模式的支持。要了解關於 JEP 440 的更多細節,可以閱讀 InfoQ 的這篇新聞報道。

Switch 模式匹配

也是在 Amber 項目的支持下,JEP 441(switch 模式匹配)最終確定了這個特性,並根據前四輪預覽的反饋進行了增強:JEP 433(switch 模式匹配第四次預覽)在 JDK 20 中交付;JEP 427(switch 模式匹配第三次預覽)在 JDK 19 中交付;JEP 420(switch 模式匹配第二次預覽)在 JDK 18 中交付;JEP 406(switch 模式匹配第一次預覽)在 JDK 17 中交付。該特性通過在 switch 表達式和語句中使用模式匹配增強了該語言。要了解關於 JEP 441 的更多細節,可以閱讀 InfoQ 的這篇新聞報道。

未命名類和實例的 Main 方法(預覽)

JEP 445(未命名類和實例的 Main 方法預覽)之前稱為靈活的 Main 方法和匿名 Main 類(預覽)和隱式類與增強 Main 方法(預覽)。它提出「改進 Java 語言,使學生可以編寫他們的第一個程序,而不需要了解為大型程序設計的語言特性。」該 JEP 延續了 Oracle Java 語言架構師 Brian Goetz 在 2022 年 9 月發表的博文 Paving the on-ramp。Oracle 技術顧問 Gavin Bierman 已經發布了規範文檔的初稿供 Java 社區審查。要了解關於 JEP 445 的更多細節,可以閱讀 InfoQ 的這篇新聞報道。

RoadTo21

Java 開發關係團隊——Billy Korando、Ana-Maria Mihalceanu、José Paumard 和 Nicolai Parlog——提供了一系列時長約 20 分鐘的視頻教程,代號為 #RoadTo21,其中介紹了更多關於 JDK 21 特性的細節:

  • Java 21 帶來了完整的模式匹配,由 Parlog 提供
  • Java 21 安全性,由 Mihalceanu 提供
  • Java 21 API 變化,由 Paumard 提供
  • Java 21 工具增強:全面改進,由 Mihalceanu 提供
  • Java 21 JVM 和 GC 改進,由 Korando 提供
  • Java 21 新特性:虛擬線程,由 Paumard 提供
  • 從 Java 17 升級到 Java 21,由 Parlog 提供

JDK 21 發布會

JDK 21 發布會於 2023 年 9 月 19 日 UTC 時間 13:00-21:00 進行了直播,由 Parlog、Mihalceanu 和 Korando 主持。這次活動邀請了眾多嘉賓,並進行了 Java First Java Always 專題討論,探討 JDK 21 的特性。整個過程在拉斯維加斯的 Oracle CloudWorld 進行了實況直播。

專題討論小組的成員包括:Oracle 開發關係高級總監 Sharat Chander、Oracle Java 平台組軟體開發高級副總裁 Georges Saab;Oracle 開發關係副總裁 Chad Arimura;Oracle 程式語言設計師 Daniel Smith。

該小組發布了四份公告:一個新的 Java Playground,基於 JShell 實用程序,可用於編寫和執行 Java 代碼;Java 社區現在可以向 dev.java 網站提供內容了;一個新的 Java Developer Relations Github 存儲庫;JDK 11 將至少支持到 2032 年。

JDK 22

目前,JDK 22 中會包含哪些 JEP 尚不確定。但是,根據最近提交的 JEP 草案和建議最終某項特性的 JEP 候選,我們已經可以推測出哪些 JEP 有可能包含在 JDK 22 中。

JEP 454(外部函數 & 內存 API)建議在兩輪孵化和三輪預覽後最終確定該特性:JEP 412(外部函數 & 內存 API 第一輪孵化)在 JDK 17 中交付;JEP 419(外部函數 & 內存 API 第二輪孵化)在 JDK 18 中交付;JEP 424(外部函數 & 內存 API 第一次預覽)在 JDK 19 中交付;JEP 434(外部函數 & 內存 API 第二次預覽)在 JDK 20 中交付;JEP 442(外部函數 & 內存 API 第三次預覽)將在即將發布的 JDK 21 GA 版本中交付。自上一個版本以來的改進包括:新增清單屬性 Enable-Native-Access,使可執行 JAR 文件中的代碼可以調用受限方法,而無需使用 --enable-native-access 標識;允許客戶端以編程方式構建 C 函數描述符,避免使用特定於平台的常量;改進對本地內存可變長數組的支持;在本地字符串中支持多字符集。

在 Panama 項目的支持下,JEP 草案 8315945(向量 API 第七輪孵化)包含了針對前六輪孵化反饋的增強:JEP 448(向量 API 第六輪孵化)將在即將發布的 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 最重要的變化包括增強 JVM 編譯器接口(JVMCI)以支持向量 API 值。

JEP 草案 8277163(值對象預覽)建議創建值對象,它們是無標識值類,用於指定其實例的行為。該草案與 JEP 401(空限制值對象存儲預覽)相關,並將繼續為實現 Valhalla 項目做出貢獻。

Daniel Smith 是 Oracle 的程式語言設計師。他更新了 JEP 401(空限制值對象存儲預覽),以便與 Oracle 的最新設計思想「在語言和類文件中表達扁平化(flattenability)」保持一致。該提案最初名為 Primitive Classes(預覽版),支持值對象(見 JEP Draft 8277163)的空限制存儲,即在欄位和數組組件中將它們初始化為類的初始實例,並拒絕空值寫入嘗試。

JEP 草案 8311828(未命名模式和變量)建議在上一輪預覽的基礎上最終確定該特性:JEP 443(未命名模式和變量預覽)在 JDK 21 中交付。這個 JEP 將「使用未命名模式(可以匹配記錄組件,而不需要說明組件的名稱或類型)和未命名變量(可以初始化,但不能使用)來增強語言。」兩者都用下劃線字符表示,如 r instanceof _(int x, int y) 和 r instanceof _。

根據 Oracle Java 平台組首席架構師 Mark Reinhold 的建議,JDK 22 的正式發布日期暫定為 2024 年 3 月 19 日。其特性預計將於 2023 年 12 月初凍結。要了解關於其他 JEP 草案和候選的更多細節,可以閱讀 InfoQ 的這篇詳細報道。

JDK 21 現在已經可以從 Oracle 官網上下載,其他供應商的二進位文件預計也將很快提供。

原文連結

https://www.infoq.com/news/2023/09/java21-released/

ClickHouse 正在退出開源世界?

棄亞馬遜轉戴爾,徹底下雲、去 K8s 後,我們已經節省了 100 萬美元

文章來源: https://twgreatdaily.com/zh-cn/128f7712af51c2e26c963c273ce8962b.html