JDK 21于2023年9月发布,带来了几个重要的预览特性:
Virtual Threads(虚拟线程)
虚拟线程是Java并发模型的重大革新,极大地简化了高并发应用的开发:
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i -> {
executor.submit(() -> {
// 每个任务都在自己的虚拟线程中运行
Thread.sleep(Duration.ofSeconds(1));
System.out.println("Task " + i + " completed");
});
});
}
// 所有任务并发执行,但只需少量平台线程
Sequenced Collections(序列化集合)
为Collection层次结构添加了新的接口和方法:
List<String> list = new ArrayList<>();
list.addFirst("first");
list.addLast("last");
String first = list.getFirst();
String last = list.getLast();
Record Patterns(记录模式)
增强了模式匹配能力:
record Point(int x, int y) {}
void printPoint(Object obj) {
if (obj instanceof Point(int x, int y)) {
System.out.println("Point: (" + x + ", " + y + ")");
}
}
JVM层面的重大优化
GraalVM
GraalVM是一个高性能的JVM实现,支持多语言运行和原生镜像生成:
# 生成原生镜像
native-image -jar myapp.jar
ZGC 和 Shenandoah GC
新一代垃圾收集器,提供极低的暂停时间:
# 启用ZGC
java -XX:+UseZGC MyApp
启动时间和内存占用优化
每个版本都在启动时间和内存占用方面有所改善,特别是在微服务和容器化环境中表现明显。
性能改进总结
| 版本 | 主要性能改进 |
|---|---|
| JDK 9 | G1成为默认GC,字符串内部表示优化 |
| JDK 10 | 局部变量类型推断减少样板代码 |
| JDK 11 | HTTP/2客户端,飞行记录器(Flight Recorder)开源 |
| JDK 12 | Shenandoah GC(实验性) |
| JDK 13 | ZGC改进,Socket API重新实现 |
| JDK 14 | NUMA内存感知,G1 NUMA感知 |
| JDK 15 | ZGC产品化,Shenandoah GC产品化 |
| JDK 16 | ZGC并发栈遍历,弹性元空间 |
| JDK 17 | 应用程序类数据共享(AppCDS)增强 |
| JDK 18 | 默认UTF-8编码,简单Web服务器 |
| JDK 19 | 虚拟线程(预览),结构化并发(预览) |
| JDK 20 | 虚拟线程(第二次预览),scoped values(预览) |
| JDK 21 | 虚拟线程正式发布,序列化集合 |

