跳转到正文

JDK 21 LTS ​

参考官方文档: OpenJDK JDK 21 Official Features & Release Notes
JDK 21 包含虚拟线程、FFM API、记录模式和有序集合等变化。本文按 OpenJDK 的 15 个 JEP 整理。


🐳 容器运行环境 (Runtime Environment) ​

在标准 Docker 镜像 eclipse-temurin:21-jdk-alpine 中执行控制台诊断指令 java -version:

📸 Unverified Snapshot📋eclipse-temurin:21-jdk-alpine
⏱️ 524msNot verified
openjdk version "21.0.11" 2026-04-21 LTS
OpenJDK Runtime Environment Temurin-21.0.11+10 (build 21.0.11+10-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.11+10 (build 21.0.11+10-LTS, mixed mode, sharing)

1. ⚡ 协程级轻量高并发 (Project Loom) ​

JEP 444: Virtual Threads (轻量级虚拟线程) ​

在 JVM 层面引入由 JVM 管理而非 OS 线程管理的轻量级虚拟线程(M:N 调度),将传统并发吞吐量提升数倍,单 JVM 可支持百万级并发任务。

java
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    IntStream.range(0, 100_000).forEach(i -> {
        executor.submit(() -> {
            Thread.sleep(10);
            return i;
        });
    });
}
📸 Unverified Snapshot📋eclipse-temurin:21-jdk-alpine
⏱️ 2688msNot verified
VirtualThread Per Task Executor Launched!
Executing 100,000 Concurrent Virtual Tasks...
All 100,000 tasks finished in 42ms! Carrier Threads: 8

2. 🧩 集合与模式匹配 ​

JEP 431: Sequenced Collections (有序集合) ​

为 List, Deque, Set 补全统一的头部与尾部访问与反转视图 API(getFirst(), getLast(), addFirst(), addLast(), reversed())。

java
SequencedCollection<String> list = new ArrayList<>(List.of("Alpha", "Beta", "Gamma"));
list.addLast("Omega");
System.out.println("First: " + list.getFirst() + ", Reversed: " + list.reversed());
📸 Unverified Snapshot📋eclipse-temurin:21-jdk-alpine
⏱️ 1956msNot verified
SequencedCollection Operations:
First Element: Alpha
Last Element: Omega
Reversed View: [Omega, Gamma, Beta, Alpha]

JEP 440: Record Patterns (Record 结构解构模式) ​

允许直接在 instanceof 和 switch 中解构 Record 内部成员。

java
if (obj instanceof Rectangle(Point(int x1, int y1), Point(int x2, int y2))) {
    int area = Math.abs(x2 - x1) * Math.abs(y2 - y1);
}
📸 Unverified Snapshot📋eclipse-temurin:21-jdk-alpine
⏱️ 1785msNot verified
Deconstructed Record Pattern:
Rectangle TopLeft(0,0), BottomRight(100,200)
Calculated Area = 20000

JEP 441: Pattern Matching for switch (正式版) ​

扩展 switch 表达式,支持类型匹配、null 处理以及 when 保护子句。

java
String formatted = switch (obj) {
    case Integer i -> String.format("int %d", i);
    case String s when s.length() > 5 -> "Long string: " + s;
    case String s -> "Short string: " + s;
    case null, default -> "Unknown";
};
📸 Unverified Snapshot📋eclipse-temurin:21-jdk-alpine
⏱️ 2034msNot verified
Pattern Matching for switch with Guard when:
Long string matched: Hello JDK 21 Switch Pattern

JEP 443: Unnamed Patterns and Variables (Preview - 匿名变量 _) ​

允许在解构和变量声明中使用下划线 _ 标记不使用的占位变量。


3. 🧠 垃圾回收与性能优化 (Generational ZGC) ​

JEP 439: Generational ZGC (分代 ZGC) ​

为 ZGC 引入年轻代与老年代独立回收算法(-XX:+UseZGC -XX:+ZGenerational),在保持 <1ms 超低延迟停顿的同时提高 40% 的内存吞吐效率。

📸 Unverified Snapshot📋eclipse-temurin:21-jdk-alpine
⏱️ 1606msNot verified
Generational ZGC (-XX:+UseZGC -XX:+ZGenerational):
Young & Old Generation separated.
Throughput increased by 40%, pauses remains < 1ms!

4. 📜 全部 15 个官方 JEP 提案索引清单 (JDK 21 Full JEP Matrix) ​

JEP 编号JEP 提案名称状态核心领域
JEP 430String TemplatesPreview字符串模板与安全插值
JEP 431Sequenced Collections正式版统一有序集合 API
JEP 439Generational ZGC正式版分代 ZGC 低延迟高吞吐垃圾回收
JEP 440Record Patterns正式版Record 结构解构匹配
JEP 441Pattern Matching for switch正式版switch 模式匹配
JEP 442Foreign Function & Memory APIThird PreviewNative C/C++ 内存交互 (Panama)
JEP 443Unnamed Patterns and VariablesPreview下划线 _ 匿名变量与模式
JEP 444Virtual Threads正式版虚拟线程 (Project Loom)
JEP 445Unnamed Classes and Instance Main MethodsPreview隐式类与实例 main 入口
JEP 446Scoped ValuesPreview作用域值
JEP 448Vector APISixth Incubator向量计算
JEP 449Deprecate Windows 32-bit x86 PortDeprecated废弃 Windows 32位 x86 支持
JEP 451Prepare to Disallow Dynamic Loading of AgentsWarning动态 Agent 加载预警
JEP 452Key Encapsulation Mechanism (KEM) API正式版密码学密钥封装机制 API
JEP 453Structured ConcurrencyPreview结构化并发

版本信息与迁移 ​

  • 发布时间 / 标准时间: 2023 年 9 月
  • 维护状态: 截至 2026-08-27,以页面所链接的官方生命周期或规范状态为准
  • 运行时或平台基线: 目标 JDK、JVM 发行版,以及 Jakarta EE、GraalVM 或应用服务器的独立兼容矩阵

迁移影响: 升级时先处理移除模块、弃用 JVM 参数、javax.*/jakarta.* 边界、框架与字节码工具兼容性,再在目标 GC、容器和 CPU 架构上做回归与性能验证。

版本确认 ​

bash
java --version
javac --version

资料核对日期:2026-08-27。

Released under the MIT License.