模式切换
Java 17 版本特性
Java 17 于 2021 年发布,同样是一个长期支持(LTS)版本,提供了许多重要的新特性、增强和废弃功能,带来了语言增强、安全改进以及跨平台支持,是 Java 开发者非常值得迁移的版本。以下是 Java 17 的主要新特性:
新的语言特性
sealed 类(密封类)—— 标准化
Java 17 将 sealed
类(在 Java 15 中引入为预览特性)标准化,允许开发者限制哪些类可以扩展或实现特定类或接口。
示例:
java
public sealed class Shape permits Circle, Rectangle {
}
public final class Circle extends Shape {
}
public final class Rectangle extends Shape {
}
sealed
:表示该类是密封的。permits
:指定允许扩展的子类。
模式匹配增强(switch 表达式)—— 预览特性
switch
表达式支持基于模式的匹配,让代码更简洁易读。
示例:
java
switch (obj) {
case Integer i -> System.out.println("Integer: " + i);
case String s -> System.out.println("String: " + s);
default -> System.out.println("Other type");
}
JDK 新特性
JEP 356:增强的伪随机数生成器
增强了 Random
的实现,新增 RandomGenerator
接口,支持多个伪随机数生成算法。
示例:
java
RandomGenerator generator = RandomGenerator.of("L64X128MixRandom");
System.out.println(generator.nextInt());
JEP 382:弃用终止器(Finalizers)
finalize()
方法被标记为弃用,未来可能移除。- 推荐使用
try-with-resources
或显式关闭资源。
JEP 391:MacOS/AArch64 支持
Java 17 增加了对 MacOS 上的 ARM64(Apple Silicon)架构的支持,提升在 M1 芯片上的性能。
JEP 306:强封装 JDK 内部 API
强化对内部 API 的封装,鼓励使用官方公开的 API,而非依赖非公开的内部实现。
标准库增强
HexFormat
新增了 HexFormat
类,用于格式化和解析十六进制数据。
示例:
java
HexFormat hex = HexFormat.of();
String hexString = hex.formatHex(new byte[]{0x1A, 0x2B, 0x3C});
System.out.println(hexString); // 输出: 1A2B3C
文本块增强
虽然文本块(Text Blocks
)已在 Java 15 标准化,但在 Java 17 中,增强了其处理方法。
垃圾回收(GC)改进
ZGC 和 G1 的改进
ZGC(Z Garbage Collector):
- 支持线程堆栈的并发处理,进一步减少停顿时间。
- 允许高达 16TB 的堆内存。
G1 GC:
- 提升吞吐量和并发性能。
移除 RMI 激活系统
RMI Activation
被移除,简化了 RMI 模块。
移除和弃用的功能
移除的功能
- 移除
Applet API
:彻底移除该过时技术。 - 移除
RMI Activation
。 - 移除过时的垃圾回收器
Concurrent Mark-Sweep (CMS)
。
弃用的功能
Security Manager
被标记为弃用。- 弃用了部分过时的 JDK 内部类和方法。
外部特性:增强性能与跨平台支持
MacOS 和 ARM64 支持
提高 M1 芯片和其他 ARM64 平台的性能。
性能优化
提升了 JDK 启动速度和运行效率。