JDK 13 新特性详解
· 阅读需 5 分钟
Java 13 作为一个非长期支持版本(non-LTS),于2019年9月17日正式发布。这个版本带来了一些重要的预览特性和改进。本文将详细介绍 JDK 13 中的主要变更和新特性。
1. 文本块(第二预览)
文本块是 Java 13 中最重要的新特性之一,它简化了多行字符串的处理:
String html = """
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
""";
主要优点:
- 更好的可读性
- 无需转义字符
- 自动处理缩进
- 保持格式整洁
2. Switch 表达式(第二预览)
JDK 13 继续改进了 Switch 表达式,引入了 yield 关键字来返回值。
改进后的 Switch 表达式
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> {
System.out.println("Six letters");
yield 6;
}
case TUESDAY -> {
System.out.println("Seven letters");
yield 7;
}
case THURSDAY, SATURDAY -> {
System.out.println("Eight letters");
yield 8;
}
case WEDNESDAY -> {
System.out.println("Nine letters");
yield 9;
}
default -> throw new IllegalStateException("Invalid day: " + day);
};
3. 动态 CDS 归档
增强了类数据共享(CDS)功能:
# 运行时动态归档
java -XX:ArchiveClassesAtExit=hello.jsa -cp hello.jar Hello
# 使用归档文件
java -XX:SharedArchiveFile=hello.jsa -cp hello.jar Hello
优势:
- 改善启动性能
- 减少内存占用
- 支持应用程序类的动态归档
4. Socket API 重新实现
使用 NioSocketImpl 替换了遗留的 PlainSocketImpl:
// 新的实现默认启用,无需特殊代码
Socket socket = new Socket();
socket.connect(new InetSocketAddress("localhost", 8080));
改进:
- 更好的可维护性
- 更现代的实现
- 为 Project Loom 做准备
5. ZGC 优化
增强了 ZGC 垃圾收集器:
# 启用 ZGC
java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC
改进:
- 取消了最大堆大小限制
- 改进了内存返还给操作系统的机制
- 优化了并发处理
6. 增强的 FileSystems.newFileSystem() 方法
新增了创建文件系统的方法:
FileSystem fs = FileSystems.newFileSystem(Path.of("archive.zip"));
特点:
- 简化了文件系统的创建
- 提供了更多的重载方法
- 改进了资源处理
7. 核心库更新
7.1 DOM 和 XML 数字格式改进
// 支持更多数字格式
NumberFormat fmt = NumberFormat.getCompactNumberInstance(
new Locale("zh"), NumberFormat.Style.SHORT
);
7.2 安全库增强
- 改进了 TLS 实现
- 更新了加密算法
- 增强了安全性检查
8. JVM 改进
8.1 增强的诊断命令
jcmd <pid> GC.class_stats
8.2 改进的应用程序类数据共享
- 支持更多类型的类
- 优化了共享机制
- 提供了更好的性能
9. 废弃特性
9.1 废弃的 API
- 标记了一些传统 API 为废弃
- 为未来的删除做准备
- 推荐使用新的替代方案
9.2 移除的功能
- 删除了一些过时的功能
- 清理了遗留代码
- 简化了维护工作
10. 其他改进
10.1 编译器改进
- 改进了泛型类型推断
- 优化了编译性能
- 提供了更好的错误消息
10.2 工具改进
- 增强了 jpackage 工具
- 改进了诊断工具
- 优化了开发体验
总结
JDK 13 虽然是一个非 LTS 版本,但它带来了一些重要的改进,特别是 Switch 表达式的进一步完善和文本块的引入。这些特性虽然都是预览状态,但它们展示了 Java 语言演进的方向,为开发者提供了更现代、更简洁的编程方式。
同时,在性能和维护性方面的改进,如 Socket API 的重新实现和 ZGC 的优化,也为 Java 平台带来了更好的运行时性能和可维护性。建议开发者在确保稳定性的前提下,尝试这些新特性,为未来的升级做好准备。