JDK JDK 学习手册8 → 27 · JDK 专用学习站
EVOLUTION · 2014 → 2026

Java 特性演进:从 Lambda 到虚拟线程

按「语言 / 并发 / 集合 / GC」四条线看跨版本变化,再用真编译矩阵确认边界。
读法纵向看一个特性如何从预览走向正式,横向看一个版本同时改变了什么。金色列是 LTS,也是生产选型的主要落点。

语言特性LANGUAGE

Java 的语言演进有一条清晰主线:让类型分支更安全、让数据载体更轻。从 var 到 record,再到模式匹配与 record 解构,都是在减少样板代码与强转。

语言特性JDK 8JDK 11JDK 17JDK 21JDK 25JDK 27
Lambda / 方法引用888888
var 局部变量推断(JEP 286)—1010101010
switch 表达式(JEP 361)——14141414
文本块(JEP 378)——15151515
record(JEP 395)——16161616
instanceof 模式(JEP 394)——16161616
sealed 类与接口(JEP 409)——17171717
record 模式(JEP 440)———212121
switch 模式匹配(JEP 441)——17 预览212121
未命名变量与模式(JEP 443 / 456)———21 预览2222
紧凑源文件与实例 main(JEP 445 / 512)———21 预览2525
String Templates(JEP 430 / 459)———21 预览——

数字为首次正式版本;p 表示该版本为预览。String Templates 在 22 二次预览后未进入 23,后续版本需查对应 JEP。

关键转折:record(16 正式)解决了「数据类」样板;sealed(17 正式)提供了受控继承;两者与 switch 模式匹配(21 正式)组合后,才有了真正的「代数数据类型」式写法。

并发与线程CONCURRENCY

从 CompletableFuture 到虚拟线程,再到结构化并发与 Scoped Values,Java 的并发模型正在从「线程池 + ThreadLocal」转向「轻量任务 + 结构化作用域」。

并发与线程JDK 8JDK 11JDK 17JDK 21JDK 25JDK 27
CompletableFuture888888
ForkJoinPool / 并行流888888
ExecutorService 实现 AutoCloseable——19191919
Thread.sleep(Duration)——19191919
虚拟线程(JEP 444)———212121
结构化并发(JEP 453 等)———21 预览21 预览21 预览
Scoped Values(JEP 446 / 506)———21 预览2525
Thread.ofVirtual / threadId———212121

虚拟线程在 21 正式;结构化并发到 27 仍是预览;Scoped Values 在 25 正式(JEP 506)。

版本边界:虚拟线程在 21 正式;结构化并发在 21–27 仍是预览;Scoped Values 在 25 转正。面试里把「虚拟线程」和「结构化并发」都说成 21 正式,是最常见的错误。

集合与核心 APIAPI

集合框架的补丁往往比语言特性更影响日常代码:工厂方法、不可变集合、SequencedCollection 的首尾统一抽象,都是「写起来更顺」的关键。

集合 / 核心 APIJDK 8JDK 11JDK 17JDK 21JDK 25JDK 27
List.of / Set.of / Map.of—99999
Map.entry / Optional.isEmpty—1111111111
String.strip / isBlank / repeat—1111111111
HttpClient—1111111111
Collectors.teeing——12121212
Stream.toList——16161616
SequencedCollection(JEP 431)———212121
String.splitWithDelimiters———212121
Stream Gatherers(JEP 461 / 485)———24 预览2525

SequencedCollection 统一了 List / Deque / LinkedHashSet / SortedSet / LinkedHashMap / SortedMap 的首尾操作与反向视图。

SequencedCollection 的意义:它第一次把 List / Deque / LinkedHashSet 的「首尾操作」与「反转视图」统一成接口,而不是各自提供一套方法。

GC 与运行时RUNTIME

GC 的演进方向是「更低停顿 + 更少调参」:G1 成为默认,ZGC 从实验到分代再到唯一模式,Shenandoah 持续低延迟路线,JDK 27 让 G1 在所有环境默认。

GC 演进JDK 8JDK 11JDK 17JDK 21JDK 25JDK 27
Parallel GC 默认8—————
G1 默认—99999
ZGC(JEP 333 / 377)——15151515
分代 ZGC(JEP 439)———212121
ZGC 分代模式默认(JEP 474)————2323
ZGC 仅分代(JEP 490 移除旧模式)————2424
Shenandoah 产品化(JEP 379)——15151515
CMS88————
G1 全环境默认(JEP 523)—————27

CMS 在 14 移除;G1 自 9 起默认;ZGC 在 21 增加分代,23 分代默认,24 移除非分代模式。

实践结论:大多数服务从 G1 开始;只有对暂停时间极端敏感、且堆较大时才考虑 ZGC。不要因为「ZGC 更新」就默认它更快——吞吐与内存开销是另一面。

移除清单REMOVED

升级真正的成本常在移除项,而不是新特性。下表只列结构性移除;每个版本页有更完整的说明。

版本移除项说明
JDK 10javah 工具(JEP 313)由 javac -h 取代,生成 JNI 头文件。
JDK 11Java EE 与 CORBA 模块(JEP 320)从 JDK 移除,需单独引入 Jakarta EE 实现。
JDK 14CMS GC(JEP 363)由 G1 取代;启动参数中的 CMS 组合会失效。
JDK 15Nashorn JavaScript 引擎(JEP 372)需要脚本能力时改用 GraalJS 等外部引擎。
JDK 17RMI Activation(JEP 407)RMI 本身保留,Activation 机制移除。
JDK 17Security Manager(JEP 411,弃用)弃用而非立即移除;24 起永久禁用。
JDK 18finalization(JEP 421,弃用)改用 try-with-resources、Cleaner 等显式资源管理。
JDK 21动态加载 Agent(JEP 451,警告)运行时 attach 会警告;启动时 -javaagent 不受影响。
JDK 24Security Manager 启用能力(JEP 486)永久禁用,相关 API 不再可用。
JDK 24非分代 ZGC(JEP 490)只保留分代模式,旧参数需要清理。
JDK 24Windows 32-bit x86 端口(JEP 479)32 位 Windows 构建不再提供。
JDK 2532-bit x86 端口(JEP 503)所有平台的 32 位 x86 支持移除。
JDK 26Applet API(JEP 504)浏览器插件时代结束,Applet 相关 API 移除。

真编译矩阵VERIFIED

下面这些结论不是查文档写的,而是在本机已安装的 JDK 上实际编译/运行验证的。✓ 表示通过,× 表示编译失败或行为不符。

示例JDK 8JDK 11JDK 17JDK 21JDK 24JDK 25源码
var(JEP 286)×✓✓✓✓✓VarDemo.java
文本块(JEP 378)××✓✓✓✓TextBlockDemo.java
record(JEP 395)××✓✓✓✓RecordDemo.java
sealed(JEP 409)××✓✓✓✓SealedDemo.java
instanceof 模式(JEP 394)××✓✓✓✓InstanceofPatternDemo.java
switch 表达式(JEP 361)××✓✓✓✓SwitchExpressionDemo.java
record 模式 + switch 模式(JEP 440 / 441)×××✓✓✓RecordPatternDemo.java
SequencedCollection(JEP 431)×××✓✓✓SequencedDemo.java
虚拟线程(JEP 444)×××✓✓✓VirtualThreadDemo.java
紧凑 main(JEP 445 / 463 / 495 / 512)×××预览预览✓CompactMain.java

实测命令:javac -d out code/<Sample>.java;预览项加 --enable-preview --release <N>。JDK 21/24 的紧凑 main 需要预览,JDK 25 已正式。

版本时间线20

2014

JDK 8 · Lambdas 改变 Java LTS 完整课程

函数式编程进入主线

Lambda 表达式Stream / 批量集合操作Date and Time API重复注解
2017

JDK 9 · 模块化落地

JPMS、JShell 与集合工厂

模块系统 JPMSJShelljlink集合工厂方法
2018

JDK 10 · var 时代开始

局部变量类型推断

局部变量类型推断 var应用类数据共享G1 并行 Full GCGC 接口
2018

JDK 11 · 第一个新节奏 LTS 完整课程

HTTP Client、单文件运行、ZGC

HTTP Client 标准化单文件源码启动Lambda 参数使用 varZGC 实验性登场
2019

JDK 12 · Switch 表达式预览

Shenandoah 与 G1 改进

Switch 表达式(预览)Shenandoah GCG1 及时归还内存G1 可中止混合收集
2019

JDK 13 · 文本块预览

Socket 重写与 ZGC 归还内存

文本块(预览)Switch 表达式(第二次预览)ZGC 归还未使用内存重写旧 Socket API
2020

JDK 14 · Switch 表达式转正

record 预览、Nashorn 移除

Switch 表达式转正record(预览)instanceof 模式匹配(预览)文本块(第二次预览)
2020

JDK 15 · 文本块转正

sealed 预览、ZGC 转正

文本块转正Sealed Classes(预览)隐藏类ZGC 转正
2021

JDK 16 · record 转正

模式匹配与强封装

record 转正instanceof 模式匹配转正Sealed Classes(第二次预览)默认强封装 JDK 内部
2021

JDK 17 · 现代 Java 的稳定基线 LTS 完整课程

sealed 转正、switch 模式预览

Sealed Classes 转正Switch 模式匹配(预览)强封装 JDK 内部增强型伪随机数生成器
2022

JDK 18 · UTF-8 默认

简易 Web 服务器与 Javadoc 代码片段

默认 UTF-8简易 Web 服务器Javadoc 代码片段核心反射改用 MethodHandles
2022

JDK 19 · 虚拟线程预览

结构化并发孵化

虚拟线程(预览)结构化并发(孵化)Record Patterns(预览)Switch 模式匹配(第三次预览)
2023

JDK 20 · Scoped Values 孵化

虚拟线程第二次预览

Scoped Values(孵化)虚拟线程(第二次预览)Record Patterns(第二次预览)Switch 模式匹配(第四次预览)
2023

JDK 21 · 虚拟线程与模式匹配 LTS 完整课程

并发与语言同时换代

虚拟线程转正Switch 模式匹配转正Record Patterns 转正SequencedCollection
2024

JDK 22 · FFM 转正

Unnamed Variables 与 Stream Gatherers

FFM API 转正Unnamed Variables & PatternsStream Gatherers(预览)多文件源码启动
2024

JDK 23 · ZGC 分代默认

Markdown 注释与模块导入预览

ZGC 分代模式默认Markdown 文档注释模块导入声明(预览)弃用 Unsafe 内存访问
2025

JDK 24 · Security Manager 退场

虚拟线程去 pinning、Stream Gatherers 转正

永久禁用 Security Manager虚拟线程去 pinningStream Gatherers 转正Class-File API 转正
2025

JDK 25 · 新一代生产基线 LTS 完整课程

Scoped Values、紧凑源文件、紧凑对象头

Scoped Values 转正紧凑对象头转正紧凑源文件与实例 main灵活构造器体
2026

JDK 26 · HTTP/3 与 AOT 缓存

G1 降同步、Applet 移除

HTTP/3 for HTTP ClientAOT 对象缓存(任意 GC)G1 降低同步开销移除 Applet API
2026

JDK 27 · G1 全环境默认

紧凑对象头默认、后量子 TLS

G1 全环境默认紧凑对象头默认TLS 1.3 后量子混合密钥交换JFR 进程内数据脱敏

数据来源SOURCES

版本发布日期与 JEP 列表来自 OpenJDK 官方项目页(openjdk.org/projects/jdk/N/);API 签名使用本机 JDK 21 的 javap 核对;真编译矩阵使用本机 JDK 8 / 11 / 17 / 21 / 24 / 25 实测。预览特性状态以对应版本的 JEP 为准。

JDK 学习手册 · JDK / Java 专用学习站 · 纯静态 · 双击 index.html 即可使用

本站专注 JDK 版本演进与 Java 教学,非 Oracle / OpenJDK 官方站点。版本数据来自 OpenJDK 官方 Features 表;课程示例已在对应本机 JDK 实测。构建日期 2026-11-12。