Java 17 是一個 長期支持版本(LTS),于 2021 年 9 月發布,是繼 Java 11 之后的重要里程碑。它整合了 Java 12~16 的眾多特性,并引入新的語言增強、JDK API 改進、性能優化和安全增強。
Java 17 版本信息
- 發布時間:2021 年 9 月
- 類型:LTS(長期支持)
- 前一個 LTS:Java 11
- JDK 編號:JEP 306~JEP 412 等
- 官網文檔:https://openjdk.org/projects/jdk/17/
一、語言特性增強
1. 封閉類(Sealed Classes)】
作用
限制哪些類可以繼承某個類,提升安全性和建模能力。
使用方式
public sealed class Shapepermits Circle, Rectangle, Square {}final class Circle extends Shape {}
final class Rectangle extends Shape {}
final class Square extends Shape {}
修飾符說明
sealed
:定義封閉類permits
:指定允許的子類- 子類必須是
final
、sealed
或non-sealed
2. Switch 增強(Pattern Matching for switch
的預覽)
Java 17 引入了對
switch
語句匹配模式的預覽支持,允許對類型進行更靈活的判斷。
static String formatter(Object o) {return switch (o) {case Integer i -> "Integer: " + i;case Long l -> "Long: " + l;case String s -> "String: " + s.toUpperCase();default -> "Unknown";};
}
3. instanceof 模式匹配(正式)
將
instanceof
和強制類型轉換整合為一種簡潔語法。
Java 11 寫法:
if (obj instanceof String) {String s = (String) obj;System.out.println(s.length());
}
Java 17 寫法:
if (obj instanceof String s) {System.out.println(s.length());
}
二、JDK API 改進
1. 強封裝 JDK 內部 API
說明:
移除了對大部分 sun.misc
、jdk.internal.*
等內部包的默認訪問。
目的:提升模塊安全
影響:舊項目需改為使用標準 API 或反射白名單處理。
2. 新的 RandomGenerator
接口
引入統一的隨機數生成框架,支持多種算法。
RandomGenerator gen = RandomGenerator.of("L64X256MixRandom");
int val = gen.nextInt();
新增類包括:
RandomGenerator
RandomGeneratorFactory
SplittableRandom
Xoroshiro128PlusPlus
3. Foreign Function & Memory API
(孵化)
用于調用本地函數(如 C 語言庫)并安全地操作內存。
取代 JNI
更安全、易用:
MemorySegment segment = MemorySegment.allocateNative(100, ResourceScope.newConfinedScope());
4. Vector API
(孵化)
支持 SIMD 矢量計算,提高性能。
用途:圖像處理、機器學習、大數據運算等。
5. Deprecate and Remove RMI Activation
廢棄并移除過時的 RMI 激活機制,鼓勵使用現代 RPC 框架。
三、已刪除的舊特性
刪除內容 | 說明 |
---|---|
Applet API | Applet 被徹底移除 |
RMI Activation | 過時,已廢棄 |
Experimental AOT 和 JIT Compiler | 移除 Graal 編譯器的實驗支持 |
Security Manager | 計劃在未來版本中移除,當前已被棄用(JEP 411) |
四、JVM 與性能改進
1. ZGC 和 Shenandoah 正式穩定
-
ZGC(低延遲 GC)和 Shenandoah 垃圾回收器現已正式穩定。
-
使用方式:
java -XX:+UseZGC MyApp java -XX:+UseShenandoahGC MyApp
五、跨版本特性整合(Java 12~16)
Java 17 還包含了前幾個版本中引入的重要功能:
版本 | 特性 |
---|---|
Java 12 | Switch 表達式(預覽) |
Java 14 | Record 類(預覽) |
Java 15 | Text Blocks 正式推出 |
Java 16 | Record 和 Pattern Matching 的改進 |
Java 17 | 將部分預覽特性正式化 |
總結
特性 | 狀態 | 說明 |
---|---|---|
封閉類(Sealed Classes) | 正式 | 增強類型控制 |
instanceof 模式匹配 | 正式 | 簡化類型檢查 |
switch 模式匹配 | 預覽 | 更靈活的分支 |
新 Random API | 正式 | 更豐富的隨機算法 |
Foreign Memory API | 孵化 | 高效替代 JNI |
Vector API | 孵化 | 支持 SIMD 運算 |
Applet 移除 | 刪除 | 不再支持 Applet |
RMI 激活移除 | 刪除 | 不推薦使用 RMI |
安全管理器棄用 | 棄用 | 將被完全移除 |
參考資料
- OpenJDK JEPs
- Oracle Java 17 Release Notes