跳到主要内容

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>
""";
java

主要优点:

  • 更好的可读性
  • 无需转义字符
  • 自动处理缩进
  • 保持格式整洁

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);
};
java

3. 动态 CDS 归档

增强了类数据共享(CDS)功能:

# 运行时动态归档
java -XX:ArchiveClassesAtExit=hello.jsa -cp hello.jar Hello
# 使用归档文件
java -XX:SharedArchiveFile=hello.jsa -cp hello.jar Hello
bash

优势:

  • 改善启动性能
  • 减少内存占用
  • 支持应用程序类的动态归档

4. Socket API 重新实现

使用 NioSocketImpl 替换了遗留的 PlainSocketImpl:

// 新的实现默认启用,无需特殊代码
Socket socket = new Socket();
socket.connect(new InetSocketAddress("localhost", 8080));
java

改进:

  • 更好的可维护性
  • 更现代的实现
  • 为 Project Loom 做准备

5. ZGC 优化

增强了 ZGC 垃圾收集器:

# 启用 ZGC
java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC
bash

改进:

  • 取消了最大堆大小限制
  • 改进了内存返还给操作系统的机制
  • 优化了并发处理

6. 增强的 FileSystems.newFileSystem() 方法

新增了创建文件系统的方法:

FileSystem fs = FileSystems.newFileSystem(Path.of("archive.zip"));
java

特点:

  • 简化了文件系统的创建
  • 提供了更多的重载方法
  • 改进了资源处理

7. 核心库更新

7.1 DOM 和 XML 数字格式改进

// 支持更多数字格式
NumberFormat fmt = NumberFormat.getCompactNumberInstance(
new Locale("zh"), NumberFormat.Style.SHORT
);
java

7.2 安全库增强

  • 改进了 TLS 实现
  • 更新了加密算法
  • 增强了安全性检查

8. JVM 改进

8.1 增强的诊断命令

jcmd <pid> GC.class_stats
bash

8.2 改进的应用程序类数据共享

  • 支持更多类型的类
  • 优化了共享机制
  • 提供了更好的性能

9. 废弃特性

9.1 废弃的 API

  • 标记了一些传统 API 为废弃
  • 为未来的删除做准备
  • 推荐使用新的替代方案

9.2 移除的功能

  • 删除了一些过时的功能
  • 清理了遗留代码
  • 简化了维护工作

10. 其他改进

10.1 编译器改进

  • 改进了泛型类型推断
  • 优化了编译性能
  • 提供了更好的错误消息

10.2 工具改进

  • 增强了 jpackage 工具
  • 改进了诊断工具
  • 优化了开发体验

总结

JDK 13 虽然是一个非 LTS 版本,但它带来了一些重要的改进,特别是 Switch 表达式的进一步完善和文本块的引入。这些特性虽然都是预览状态,但它们展示了 Java 语言演进的方向,为开发者提供了更现代、更简洁的编程方式。

同时,在性能和维护性方面的改进,如 Socket API 的重新实现和 ZGC 的优化,也为 Java 平台带来了更好的运行时性能和可维护性。建议开发者在确保稳定性的前提下,尝试这些新特性,为未来的升级做好准备。