跳到主要内容 JDK 21 与 JDK 8 主要新特性对比 | 极客日志
Java java
JDK 21 与 JDK 8 主要新特性对比 对比了 JDK 8 至 JDK 21 期间 Java 语言及平台的重大变革。涵盖模块系统、局部变量推断、文本块、记录类、模式匹配、密封类等语言特性革新;虚拟线程带来的并发革命;集合工厂、Stream API、HTTP Client 等 API 增强;以及 G1GC、ZGC 等 JVM 性能改进。同时提供了从 JDK 8 迁移至新版的具体建议,包括包结构调整、默认 GC 变更及 LTS 版本选择策略,旨在帮助开发者快速掌握现代 Java 开发核心能力。
人间过客 发布于 2026/3/21 更新于 2026/4/18 5 浏览从 JDK 8(2014 年 3 月发布)到 JDK 21(2023 年 9 月发布)的 9 年时间里,Java 经历了巨大的变革。以下是主要的新特性对比:
一、语言特性重大革新
1. 模块系统(Jigsaw) - JDK 9
模块化 JDK 和应用程序,解决 JAR 地狱问题
module-info.java 文件定义模块依赖
2. 局部变量类型推断(var) - JDK 10
List<String> list = <>();
<String>();
list.stream();
new
ArrayList
var
list
=
new
ArrayList
var
stream
=
3. 文本块(Text Blocks) - JDK 15 正式
String html = "<html>\n" + " <body>\n" + " <p>Hello</p>\n" + " </body>\n" + "</html>\n" ;
String html = """
<html>
<body>
<p>Hello</p>
</body>
</html>
""" ;
4. 记录类(Records) - JDK 16 正式
public class Person {
private final String name;
private final int age;
}
public record Person (String name, int age) { }
5. 模式匹配
instanceof 模式匹配 - JDK 16 正式
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
if (obj instanceof String s) {
System.out.println(s.length());
}
switch 表达式和模式匹配 - JDK 21 正式
String formatted = switch (obj) {
case Integer i -> String.format("int %d" , i);
case Long l -> String.format("long %d" , l);
case Double d -> String.format("double %f" , d);
case String s -> String.format("String %s" , s);
default -> obj.toString();
};
6. 密封类(Sealed Classes) - JDK 17 正式
public sealed interface Shape permits Circle, Rectangle, Triangle { }
public final class Circle implements Shape { }
public final class Rectangle implements Shape { }
二、革命性并发特性
虚拟线程(Virtual Threads) - JDK 21 正式
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0 , 100_000 ).forEach(i -> {
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1 ));
return i;
});
});
}
三、API 增强
1. 集合工厂方法 - JDK 9
List<String> list = new ArrayList <>();
list.add("A" );
list.add("B" );
list = Collections.unmodifiableList(list);
List<String> list = List.of("A" , "B" , "C" );
Set<String> set = Set.of("A" , "B" );
Map<String, Integer> map = Map.of("A" , 1 , "B" , 2 );
2. Stream API 增强
takeWhile/dropWhile - JDK 9
ofNullable - JDK 9
iterate 增强 - JDK 9
3. Optional 增强 - JDK 9+
optional.ifPresentOrElse(
value -> System.out.println(value),
() -> System.out.println("空值" )
);
4. HTTP Client API - JDK 11 正式
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com" ))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
5. 新的日期时间 API 增强 - JDK 8 已有,后续版本增强
LocalDate date = LocalDate.now();
Instant instant = Instant.now();
四、性能与 JVM 改进
1. 新的垃圾收集器
G1GC - JDK 9 成为默认(替代 Parallel GC)
ZGC - JDK 15 生产就绪(低延迟)
Shenandoah - JDK 12 生产就绪(低暂停时间)
2. 应用程序类数据共享(AppCDS) - JDK 10+
3. JFR(Java Flight Recorder)生产就绪 - JDK 11
五、包和模块变化
Java EE 模块移除 - JDK 11
JAXB、JAX-WS、JAF 等移到 Jakarta EE
需要单独添加依赖
六、开发工具增强
1. jshell - JDK 9
2. jpackage - JDK 16
七、重要版本里程碑 版本 年份 关键特性 JDK 8 2014 LTS,Lambda、Stream API、新日期时间 API JDK 9 2017 模块系统、JShell、集合工厂方法 JDK 11 2018 LTS,局部变量类型推断,HTTP Client JDK 17 2021 LTS,密封类、模式匹配增强 JDK 21 2023 LTS,虚拟线程、结构化并发、分代 ZGC
**注:**LTS 是 Long-Term Support 的缩写,意为'长期支持版'。
八、迁移建议
需要特别注意的变化:
包结构调整:Java EE 相关包已移除
默认 GC 改变:从 Parallel GC 变为 G1GC
模块化:大型应用需要考虑模块化
API 变化:许多 API 已被标记为废弃
立即价值:
虚拟线程 - 大幅提升并发性能
记录类 - 减少样板代码
模式匹配 - 更简洁的条件处理
文本块 - 更好的字符串处理
ZGC - 极低延迟垃圾回收
最低推荐版本:
新项目:直接从 JDK 21 LTS 开始
生产系统:至少升级到 JDK 17 LTS
遗留系统:考虑逐步迁移到 JDK 11 LTS 作为中间步骤
JDK 21 代表了 Java 平台的重大飞跃,特别在并发编程方面带来了革命性的改进,是现代 Java 开发的推荐起点。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online