JDK 21新特性全面解析

Java Development Kit (JDK) 21作為Oracle長期支持(LTS)版本,于2023年9月正式發布,帶來了多項令人振奮的新特性和改進。本文將全面介紹JDK 21中的主要更新,幫助開發者了解如何利用這些新功能提升開發效率和代碼質量。

一、虛擬線程(Virtual Threads)正式發布

虛擬線程是JDK 21中最引人注目的特性之一,它從預覽階段(JDK 19和20)正式轉正。

// 創建虛擬線程的簡單示例
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {IntStream.range(0, 10_000).forEach(i -> {executor.submit(() -> {Thread.sleep(Duration.ofSeconds(1));return i;});});
}

核心優勢:

  • 輕量級線程,可創建數百萬個而不會耗盡系統資源
  • 簡化高吞吐量并發應用程序的編寫
  • 與現有Java代碼無縫兼容,使用相同的Thread API
  • 顯著減少編寫、維護和觀察高吞吐量并發應用程序的工作量

二、序列集合(Sequenced Collections)

JDK 21引入了一套新的接口來表示具有定義順序的集合:

interface SequencedCollection<E> extends Collection<E> {// 新增方法SequencedCollection<E> reversed();void addFirst(E);void addLast(E);E getFirst();E getLast();E removeFirst();E removeLast();
}

具體實現:

  • SequencedCollection - 有序集合(如List)
  • SequencedSet - 有序且不重復的集合(如LinkedHashSet)
  • SequencedMap - 有序映射(如LinkedHashMap)

使用示例:

List<Integer> list = new ArrayList<>(List.of(1, 2, 3));// 新方法
list.getFirst(); // 1
list.getLast();  // 3var reversed = list.reversed(); // [3, 2, 1]

三、分代ZGC(Generational ZGC)

JDK 21對Z垃圾收集器進行了重大改進,引入了分代收集:

主要改進:

  • 通過區分年輕代和老年代對象提高垃圾收集效率
  • 減少垃圾收集的開銷,特別是對于分配率高的應用程序
  • 保持ZGC的低延遲特性(暫停時間通常小于1毫秒)
  • 可通過-XX:+ZGenerational標志啟用

四、模式匹配的增強

1. 記錄模式(Record Patterns)正式發布

record Point(int x, int y) {}static void printSum(Object obj) {if (obj instanceof Point(int x, int y)) {System.out.println(x + y);}
}

2. switch模式匹配增強

static String formatterPatternSwitch(Object obj) {return switch (obj) {case Integer i -> String.format("int %d", i);case Long l    -> String.format("long %d", l);case Double d  -> String.format("double %f", d);case String s  -> String.format("String %s", s);default        -> obj.toString();};
}

五、字符串模板(預覽特性)

JDK 21引入了字符串模板(預覽),簡化字符串插值和復雜字符串的構建:

String name = "Joan";
String info = STR."My name is \{name}";
// 結果: "My name is Joan"// 復雜示例
String title = "My Web Page";
String text  = "Hello, world";
String html = STR."""<html><head><title>\{title}</title></head><body><p>\{text}</p></body></html>""";

六、外部函數與內存API(正式發布)

替代JNI的更安全、更高效的方式:

// 1. 在Java代碼中鏈接到C庫函數
Linker linker = Linker.nativeLinker();
SymbolLookup stdlib = linker.defaultLookup();
MethodHandle strlen = linker.downcallHandle(stdlib.lookup("strlen").get(),FunctionDescriptor.of(JAVA_LONG, ADDRESS)
);// 2. 使用try-with-resources管理原生內存
try (Arena arena = Arena.ofConfined()) {MemorySegment str = arena.allocateUtf8String("Hello");long len = (long) strlen.invoke(str);System.out.println(len); // 5
}

七、未命名模式和變量(預覽)

簡化模式匹配并減少不必要的變量命名:

// 舊方式
if (obj instanceof Point p) {System.out.println(p.x());
}// 新方式 - 不需要命名變量
if (obj instanceof Point(_, int y)) {System.out.println("y=" + y);
}// 未命名變量示例
try {int res = calculate();
} catch (Exception _) {  // 忽略異常細節System.out.println("計算出錯");
}

八、未命名類和實例main方法(預覽)

簡化入門程序編寫:

// 傳統方式
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}
}// 新方式(預覽)
void main() {System.out.println("Hello, World!");
}

九、作用域值(Scoped Values)預覽

替代線程局部變量的更好選擇:

final static ScopedValue<...> V = ScopedValue.newInstance();// 在作用域內設置值
ScopedValue.where(V, <value>).run(() -> { ... V.get() ... });

優勢:

  • 不可變,更安全
  • 生命周期有限,僅限于動態范圍
  • 子線程自動繼承

十、其他重要改進

  1. 密鑰封裝機制API:用于安全密鑰交換的加密功能
  2. 準備禁止動態加載代理:為未來版本默認禁止動態加載代理做準備
  3. 性能改進:包括G1垃圾收集器的優化和向量API的增強
  4. Linux/RISC-V移植:正式支持RISC-V架構

總結

JDK 21作為長期支持版本,為Java開發者帶來了眾多強大的新特性和改進。從革命性的虛擬線程到實用的序列集合,從模式匹配的增強到字符串模板的引入,這些特性共同推動Java平臺向前邁進了一大步。

對于開發者而言,現在是時候開始探索這些新特性,評估它們如何能夠提升現有應用程序的性能和開發效率。特別是虛擬線程和分代ZGC等特性,有望顯著改善高并發應用程序的性能和可維護性。

隨著Java的持續演進,JDK 21再次證明了Java平臺在現代軟件開發中的活力和創新精神。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81329.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何選擇高性價比的 1T 服務器租用服務?

選擇高性價比的 1T 服務器租用服務?&#xff0c;可參考以下內容&#xff1a; 1、根據需求選配置? 明確自身業務需求是關鍵。若為小型網站或輕量級應用&#xff0c;數據存儲與處理需求不高&#xff0c;選擇基礎配置服務器即可。如個人博客網站&#xff0c;普通的 Intel Xeon …

JavaScript性能優化實戰(11):前沿技術在性能優化中的應用

引言 隨著Web應用復雜度和性能需求不斷提高,傳統的JavaScript優化技術已經無法滿足某些高性能計算場景的需求。本文將深入探討前沿Web技術如何突破JavaScript的性能瓶頸,為Web應用提供接近原生應用的性能體驗。從底層計算到圖形渲染,從并發處理到動畫優化,我們將通過實際案…

package.json 和 package-lock.json 的區別

package.json?? ??作用?? ??聲明項目元數據??&#xff1a;如項目名稱、版本、描述、入口文件等。??定義依賴范圍??&#xff1a;在 dependencies 和 devDependencies 中聲明項目??直接依賴??的包及其??版本范圍??&#xff08;如 ^1.2.3&#xff09;。??…

Rollup入門與進階:為現代Web應用構建超小的打包文件

我們常常面臨Webpack復雜配置或是Babel轉譯后的冗余代碼&#xff0c;結果導致最終的包體積居高不下加載速度也變得異常緩慢&#xff0c;而在眾多打包工具中Rollup作為一個輕量且高效的選擇&#xff0c;正悄然改變著這一切&#xff0c;本文將帶你深入了解這個令人驚艷的打包工具…

基于C#的MQTT通信實戰:從EMQX搭建到發布訂閱全解析

MQTT(Message Queueing Telemetry Transport) 消息隊列遙測傳輸&#xff0c;在物聯網領域應用的很廣泛&#xff0c;它是基于Publish/Subscribe模式&#xff0c;具有簡單易用&#xff0c;支持QoS&#xff0c;傳輸效率高的特點。 它被設計用于低帶寬&#xff0c;不穩定或高延遲的…

Mysql數據庫之集群進階

一、日志管理 5.7版本自定義路徑時的文件需要自己提前創建好文件&#xff0c;不會自動創建&#xff0c;否則啟動mysql會報錯 錯誤日志 rpm包(yum) /var/log/mysql.log 默認錯誤日志 ###查詢日志路徑 [rootdb01 ~]# mysqladmin -uroot -pEgon123 variables | grep -w log_e…

當硅基存在成為人性延伸的注腳:論情感科技重構社會聯結的可能性

在東京大學機器人實驗室的檔案室里&#xff0c;保存著一份泛黃的二戰時期設計圖——1943年日本陸軍省秘密研發的“慰安婦替代品”草圖。這個誕生于戰爭陰霾的金屬軀體&#xff0c;與2025年上海進博會上展出的MetaBox AI伴侶形成時空對話&#xff1a;當人類將情感需求投射于硅基…

5月17日

這幾天不知道為啥沒更新。可能是玩得太瘋了。或者是考試有點集中&#xff1f;&#xff1f; 線性代數開課了&#xff0c;英語昨天完成了debate 昨天中午debate結束我們就出去玩了&#xff0c;去的那里時光民俗&#xff0c;別墅很好&#xff0c;770平米&#xff0c;但是缺點是可…

FIFO的應用案例(基于Zephyr OS )

目錄 概述 1. 軟硬件環境 1.1 軟件開發環境 1.2 硬件環境 2 FIFO的函數接口 3 FIFO的應用函數實現 3.1 實現步驟 3.2 代碼設計 3.3 測試代碼實現 3.4 源代碼文件 4 編譯和測試 4.1 編譯代碼 4.2 測試 概述 本文介紹了在nRF52832開發板上使用Zephyr操作系統進行…

AWS Elastic Beanstalk部署極簡Spring工程(EB CLI失敗版)

棄用 這里我沒有走通EB CLI方式部署。 問題 最近又加入了AWS項目組&#xff0c;又要再次在AWS云上面部署Spring服務&#xff0c;我這里使用的使用AWS中國云。需要使用AWS Elastic Beanstalk部署一個極簡Spring工程。 EB CLI安裝 安裝EB CLI之前需要先在本地安裝好Git&…

粒子群算法(PSO算法)

粒子群算法概述 1.粒子群優化算法&#xff08;Particle Swarm Optimization&#xff0c;簡稱PSO&#xff09;。粒子群優化算法是在1995年由Kennedy博士和Eberhart博士一起提出的&#xff0c;它源于對鳥群捕食行為的研究。 2.基本核心是利用群體中的個體對信息的共享從而使得整…

leetcode2934. 最大化數組末位元素的最少操作次數-medium

1 題目&#xff1a;最大化數組末位元素的最少操作次數 官方標定難度&#xff1a;中 給你兩個下標從 0 開始的整數數組 nums1 和 nums2 &#xff0c;這兩個數組的長度都是 n 。 你可以執行一系列 操作&#xff08;可能不執行&#xff09;。 在每次操作中&#xff0c;你可以選…

Elasticsearch 官網閱讀之 Term-level Queries

Term-level Queries 參考&#xff1a;https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-exists-query 一、Term Query Term Query 是 term 精準查詢。需要注意的是&#xff0c;在進行 Term Query 的時候&#xff0c;要避免 text 類型的字段&#x…

信貸域——互聯網金融業務

摘要 本文深入探討了信貸域全托與半托業務的定義、特點、適用場景及注意事項&#xff0c;并分析了互聯網金融核心信息流的多個方面&#xff0c;包括資金流、信息流、風險流、合規流、物流、技術流和商流&#xff0c;還闡述了金融系統“斷直連”業務的相關內容&#xff0c;以及…

科技晚報 AI 速遞:今日科技熱點一覽 丨 2025 年 5 月 17 日

科技晚報AI速遞:今日科技熱點一覽 丨2025年5月17日 我們為您匯總今日的科技領域最新動向&#xff0c;帶您快速了解前沿技術、突破性研究及行業趨勢。 黃仁勛勸特朗普&#xff1a;AI 芯片出口規則得改&#xff0c;中國緊追其后&#xff1a;英偉達 CEO 黃仁勛在華盛頓 “山與谷論…

使用streamlit實現vLLM多實例信息統一監控

本文代碼和配置文件實現了一個基于 Streamlit 和 FastAPI 的前后端分離的應用程序&#xff0c;用于管理和展示 VLLM&#xff08;Very Large Language Model&#xff09;實例的信息。以下是代碼和配置文件的總結摘要&#xff1a; 概要 功能概述 前后端啟動方式&#xff1a; 使用…

搭建一個WordPress網站需要多少成本

WordPress 最初可能只是一個簡單的博客平臺。但近年來&#xff0c;它不僅成為了最好的博客平臺&#xff0c;還成為了一個全面的內容管理系統。白宮、jQuery、NGINX、《紐約時報》等企業都把 WordPress 作為自己的網上家園。 不過&#xff0c;它們只是其中的佼佼者。根據 Built…

飛帆控件 post or get it when it has get

我在這里分享兩個鏈接&#xff1a; post_get_it 設計 - 飛帆 有人看出來這個控件是干什么用嗎&#xff1f; 控件的配置&#xff1a;

AI智能體 | 使用Coze一鍵制作“假如書籍會說話”視頻,18個作品狂吸17.6萬粉,讀書博主新標桿!(附保姆級教程)

目錄 一、整體工作流設計 二、制作工作流 2.1 開始節點 2.2 大模型_生成對話文案 2.3 代碼_字幕切割 2.4 畫板_對話背景 2.5 循環_對話語音01 2.5.1 選擇器_2 2.5.2 語音合成02 2.5.3 語音合成03 2.5.4 變量聚合_1 2.5.5 視頻合成01 2.6 循環_3 2.6.1 選擇器_3 …

mysql中4種掃描方式和聚簇索引非聚簇索引【爽文一篇】

目錄 一 mysql的聚簇索引&非聚簇索引 1.1 數據表 1.2 聚簇索引 1.3 非聚簇索引 1.4 覆蓋索引 二 mysql的4種掃描查詢 2.1 全表掃描 2.2 索引掃描 2.3 覆蓋索引掃描 2.4 回表掃描 2.5 總結 三 mysql的回表查詢詳解 3.1 回表查詢 一 mysql的聚簇索引&非聚簇…