Java 23連夜官宣釋出,IDEA親測可用!

公众号-JavaEdge發表於2024-09-18

0 前言

官宣釋出:

IDEA已支援下載:

1 JEPs

JEP 455 Primitive Types in Patterns, instanceof, and switch (Preview)

透過允許在所有模式上下文中使用原始型別模式,增強了模式匹配,並擴充套件了 instanceofswitch 以適用於所有原始型別。這是一項預覽語言特性

JEP 466 Class-File API (Second Preview)

提供解析、生成和轉換 Java 類檔案的標準 API。這是一項預覽 API

JEP 467 Markdown文件註釋

使 JavaDoc 文件註釋能夠用 Markdown 而非 HTML 和 JavaDoc @ 標籤的混合體編寫。

JEP 469 Vector API (Eighth Incubator)

引入一個 API 來表達向量計算,這些計算在執行時可靠地編譯為支援的 CPU 架構上的最佳向量指令,從而實現優於等效標量計算的效能。

JEP 471 廢除 Memory-Access Methods in sun.misc.Unsafe for Removal

sun.misc.Unsafe 中的記憶體訪問方法標記為將來版本中刪除。這些不受支援的方法已被標準 API 取代,即 VarHandle API (JEP 193, JDK 9) 和 Foreign Function & Memory API (JEP 454, JDK 22)。強烈鼓勵庫開發者從 sun.misc.Unsafe 遷移到支援的替代品,以便應用程式能夠順利遷移到現代 JDK 版本。

JEP 473 Stream Gatherers (Second Preview)

增強 Stream API 以支援自定義中間操作。這將允許流管道以不容易用現有內建中間操作實現的方式轉換資料。這是一項預覽 API

JEP 474 ZGC: Generational Mode by Default

將ZGC預設模式切換為分代模式。棄用非分代模式,並計劃在未來版本中刪除。

JEP 476 Module Import Declarations (Preview)

簡潔地匯入模組匯出的所有包。簡化了模組庫重用,但不需要匯入程式碼本身處於模組中。預覽語言特性

JEP 477 Implicitly Declared Classes and Instance Main Methods (Third Preview)

發展 Java 程式語言,以便初學者在不需要理解為大型程式設計的語言特性的情況下編寫首個程式。遠非使用語言的單獨方言,初學者可為單類程式編寫簡化的宣告,然後隨技能提升,無縫擴充套件程式以使用更高階特性。經驗豐富開發同樣可享受簡潔編寫小程式樂趣,而無需使用旨在大規模程式設計的構造。預覽語言特性

JEP 480 Structured Concurrency (Third Preview)

透過引入 結構化併發 API簡化併發程式設計。結構化併發將不同執行緒中執行的一組相關任務視為單一工作單元,簡化錯誤處理和取消操作,提高可靠性,並增強可觀察性。預覽 API

JEP 481 Scoped Values (Third Preview)

引入 作用域值,使方法能線上程內與其被呼叫者共享不可變資料,並與子執行緒共享。作用域值比執行緒區域性變數更易理解。還具有更低空間和時間成本,尤其與虛擬執行緒 (JEP 444) 和結構化併發 (JEP 480) 一起使用時。預覽 API

JEP 482 Flexible Constructor Bodies (Second Preview)

允許在顯式建構函式呼叫(即 super(..)this(..))之前出現語句。這些語句不能引用正在構造的例項,但它們可初始化其欄位。在呼叫另一個建構函式之前初始化欄位,當方法被覆蓋時,可以使類更可靠。預覽語言特性

2 新特性

帶明確區域設定的控制檯方法 (JDK-8330276)

core-libs/java.io

java.io.Console 類新增了以下方法,這些方法接受一個 java.util.Locale 引數:

  • public Console format(Locale locale, String format, Object ... args)
  • public Console printf(Locale locale, String format, Object ... args)
  • public String readLine(Locale locale, String format, Object ... args)
  • public char[] readPassword(Locale locale, String format, Object ... args)

使用者現在可以用指定的 Locale 格式化輸出字串或顯示提示文字,該 Locale 可能與預設區域設定無關。例如,程式碼片段 System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 將顯示:

2024-五月-16 星期四

支援直到另一個瞬間的持續時間 (JDK-8331202)

core-libs/java.time

java.time.Instant 類新增了一個新的方法,以獲得直到指定 InstantDuration。新方法 Instant.until(Instant) 產生的持續時間與 Duration.between(Temporal, Temporal) 相同,但更易於使用者發現。此外,與 Instant.until(Temporal, TemporalUnit) 方法相比,新方法直接返回一個 Duration,無需單位轉換。

新的 Parallel GC Full GC 演算法 (JDK-8329203)

hotspot/gc

Parallel GC 現在使用與 Serial GC 和 G1 GC Full GCs 中相同的 Full GC 演算法。

以前的演算法包括透過 Java 堆中的每個活動物件進行三次傳遞:

  1. 標記活動物件
  2. 計算每個活動物件的新位置
  3. 移動物件到新位置並更新每個物件的欄位

在第 2 步中計算的物件位置使用非堆記憶體儲存,以避免透過 Java 堆中的活動物件進行第四次傳遞。問題是這種方案對於某些問題工作負載來說擴充套件性不好。此外,這種資料結構使用 Java 堆的 1.5% 作為非堆記憶體。

新演算法對於問題工作負載的效能顯著更好,並且不需要額外的記憶體,減少了所有工作負載的佔用空間。

3 已移除的特性和選項

移除 ThreadGroup.stop (JDK-8320786)

core-libs/java.lang

在此版本中已移除 java.lang.ThreadGroup.stop() 方法。這個固有不安全的方法在 JDK 1.2 (1998) 中已被棄用,在 Java 18 中棄用於刪除,並在 Java 20 中重新規定/降級為無條件丟擲 UnsupportedOperationException。使用此方法的程式碼將不再編譯。在舊版本上編譯的程式碼,如果在使用 JDK 23 或更新版本時執行,現在會丟擲 NoSuchMethodError 而不是 UnsupportedOperationException

移除 Thread.suspend/resumeThreadGroup.suspend/resume (JDK-8320532)

core-libs/java.lang

在此版本中已移除 java.lang.Thread.suspend()java.lang.Thread.resume()java.lang.ThreadGroup.suspend()java.lang.ThreadGroup.resume() 方法。這些容易死鎖的方法在 JDK 1.2 (1998) 中已被棄用,在 Java 14 中棄用於刪除,並在 Java 19/20 中重新規定/降級為無條件丟擲 UnsupportedOperationException。使用這些方法的程式碼將不再編譯。在舊版本上編譯的程式碼,如果在使用 JDK 23 或更新版本時執行,現在會丟擲 NoSuchMethodError 而不是 UnsupportedOperationException

移除模組 jdk.random (JDK-8330005)

core-libs/java.util

已從 JDK 中移除 jdk.random 模組。該模組包含 java.util.random.RandomGenerator 演算法的實現。這些實現已移動到 java.base 模組,java.base 模組現在將負責支援這些演算法。

依賴 jdk.random 模組的應用程式,無論是透過構建指令碼還是透過模組依賴項,都應刪除對此模組的引用。

關注我,緊跟本系列專欄文章,咱們下篇再續!

作者簡介:魔都架構師,多家大廠後端一線研發經驗,在分散式系統設計、資料平臺架構和AI應用開發等領域都有豐富實踐經驗。

各大技術社群頭部專家博主。具有豐富的引領團隊經驗,深厚業務架構和解決方案的積累。

負責:

  • 中央/分銷預訂系統效能最佳化
  • 活動&券等營銷中臺建設
  • 交易平臺及資料中臺等架構和開發設計
  • 車聯網核心平臺-物聯網連線平臺、大資料平臺架構設計及最佳化
  • LLM Agent應用開發
  • 區塊鏈應用開發
  • 大資料開發挖掘經驗
  • 推薦系統專案

目前主攻市級軟體專案設計、構建服務全社會的應用系統。

參考:

  • 程式設計嚴選網

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章