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