Java/JDK 21正式發佈!15個特性一覽

JDK 21已經於2023年9月19日正式發佈。本文總結了JDK 21發佈的新特性。

發佈版本說明

根據發佈的規劃,這次發佈的 JDK 21 將是一個長期支持版(LTS 版)。LTS 版每 2 年發佈一個,上一次長期支持版是 21 年 9 月發佈的 JDK 17。

本版本是Java SE平臺21版的參考實現,由Java社區流程中的JSR 396指定。

安裝包下載

主要分爲OpenJDK版本和Oracle版本,下載地址如下:

上述版本,如果是個人學習用途,則差異不大。但如果是用於商業用途,則需要仔細看好相關的授權。Oracle JDK商用需要遵循 Oracle No-Fee Terms and Conditions (NFTC)協議,而OpenJDK根據GPL v2許可獲得許可。

更多有關Java的基本知識,可以參閱《Java核心編程》這本書,描述的非常詳細。

JDK 21 新特性說明

正式穩定功能

JEP 431:序列集合

序列集合(Sequenced Collections)在 core-libs/java.util:collections 包中。

該 JEP 提議引入“一個新的接口族,用於表示集合的概念,這些集合的元素按照預定義的序列或順序排列,它們是作爲集合的結構屬性。”這一提案的動機是由於集合框架中缺乏預定義的順序和統一的操作集。

JEP 439:分代 ZGC

分代 ZGC(Generational ZGC)在 hotspot/gc 包中。

通過擴展Z垃圾回收器(ZGC)來維護年輕對象和年老對象的獨立生成,從而提高應用程序性能。這將使ZGC能夠更頻繁地收集年輕對象——這些對象往往英年早逝。

JEP 440:記錄模式

使用記錄模式(Record Patterns)增強Java編程語言,以解構記錄值。可以嵌套記錄模式和類型模式,以實現功能強大、聲明性和可組合形式的數據導航和處理。

JEP 441:switch 模式匹配

通過switch表達式和語句的模式匹配來增強Java編程語言。通過將模式匹配擴展到switch,可以針對多個模式測試表達式,每個模式都有一個特定的操作,從而可以簡潔、安全地表達複雜的面向數據的查詢。

JEP 444:虛擬線程

將虛擬線程(Virtual Threads)引入Java平臺。虛擬線程是輕量級線程,可以顯著減少編寫、維護和觀察高吞吐量併發應用程序的工作量。

詳見《Java下一代高併發技術——虛擬線程(Virtual Threads)》

JEP 449:棄用 Windows 32 位 x86 移植

棄用Windows 32位x86移植,並打算在將來的版本中將其刪除。

JEP 451:準備禁止動態加載代理

將代理動態加載到正在運行的JVM中時發出警告。這些警告旨在讓用戶爲將來的版本做好準備,該版本默認情況下不允許動態加載代理,以提高默認情況下的完整性。在啓動時加載代理的可服務性工具不會導致在任何版本中發出警告。

JEP 452:密鑰封裝機制 API

介紹一種用於密鑰封裝機制(Key Encapsulation Mechanism,簡稱KEM)的API,這是一種使用公鑰加密來保護對稱密鑰的加密技術。

預覽階段功能

JEP 430:字符串模板(預覽)

使用字符串模板(String Templates)增強Java編程語言。字符串模板通過將文本與嵌入的表達式和模板處理器耦合來生成專門的結果,從而補充Java現有的字符串文本和文本塊。這是一個預覽語言功能和API。

JEP 442:外部函數和內存 API(第三次預覽)

引入API,Java程序可以通過該API與Java運行時之外的代碼和數據進行互操作。通過有效地調用外部函數(即JVM外部的代碼),並通過安全地訪問外部內存(即不受JVM管理的內存),API使Java程序能夠調用本機庫並處理本機數據,而不會出現JNI的脆弱性和危險性。這是一個預覽API。

JEP 443:未命名模式和變量(預覽)

使用未命名模式和未命名變量來增強Java語言,未命名模式匹配記錄組件而不說明組件的名稱或類型,未命名變量可以初始化但不使用。兩者都用下劃線字符_表示。這是一個預覽語言功能。

JEP 445:未命名類和實例主方法(預覽)

發展Java語言,使學生無需理解爲大型程序設計的語言功能即可編寫第一個程序。學生們不用使用單獨的Java方言,就可以爲單類程序編寫精簡的聲明,然後隨着技能的發展,無縫地擴展程序,使用更高級的功能。這是一個預覽語言功能。

JEP 446:作用域值(預覽)

引入作用域值,這些值可以在不使用方法參數的情況下安全有效地共享給方法。它們優先於線程化局部變量,尤其是在使用大量虛擬線程時。這是一個預覽API。

實際上,作用域值是一個隱式方法參數。這“就好像”一系列調用中的每個方法都有一個額外的、不可見的參數。沒有任何方法聲明此參數,只有能夠訪問作用域值對象的方法才能訪問其值(數據)。通過作用域值,可以通過一系列中間方法將數據從調用者安全地傳遞給遙遠的被調用者,這些中間方法不聲明數據的參數,也無法訪問數據。

JEP 453:結構化併發(預覽)

通過引入用於結構化併發(Structured Concurrency)的API來簡化併發編程。結構化併發將在不同線程中運行的相關任務組視爲單個工作單元,從而簡化錯誤處理和消除,提高可靠性,並增強可觀察性。這是一個預覽API。

孵化階段功能

JEP 448:Vector API(孵化器第六階段)

引入API來表示向量計算,這些向量計算在運行時可靠地編譯爲支持的CPU架構上的最佳向量指令,從而實現優於等效標量計算的性能。

參考引用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章