ca
JDK 8-17 特性
JDK 8 到 JDK 17 跨越了 Java 平台从“长期大版本”到“每六个月发布一次”的阶段。学习时不要只背语法糖,还要关注模块化、JVM、GC、工具链和兼容性变化。
版本索引
| 版本 | 发布时间 | 定位 | 代表性变化 |
|---|---|---|---|
| JDK 8 | 2014-03 | LTS | Lambda、Stream、默认方法、java.time |
| JDK 9 | 2017-09 | 功能版本 | 模块系统、JShell、集合工厂、G1 默认化 |
| JDK 10 | 2018-03 | 功能版本 | var、容器感知、AppCDS |
| JDK 11 | 2018-09 | LTS | 标准 HTTP Client、单文件运行、ZGC |
| JDK 12 | 2019-03 | 功能版本 | Switch 表达式预览、Shenandoah、默认 CDS |
| JDK 13 | 2019-09 | 功能版本 | Text Blocks 预览、动态 CDS |
| JDK 14 | 2020-03 | 功能版本 | Switch 表达式正式、Record 预览、友好 NPE |
| JDK 15 | 2020-09 | 功能版本 | Text Blocks 正式、Sealed Class 预览、ZGC 正式 |
| JDK 16 | 2021-03 | 功能版本 | Record、instanceof 模式匹配正式、jpackage |
| JDK 17 | 2021-09 | LTS | Sealed Class 正式、强封装 JDK 内部 API |
建议学习顺序
从 JDK 8 升级到 JDK 17 的重点
- 不要把 Preview/Incubator 特性当成稳定 API;生产代码应确认特性在目标版本是否已正式发布。
- JDK 9 引入模块系统并逐步封装内部 API,JDK 17 默认强封装,依赖
sun.*或深度反射的旧框架需要升级。 - JDK 11 移除了 Java EE 与 CORBA 模块,JAXB、JAX-WS 等需要改为独立依赖。
- CMS 在 JDK 14 被移除;迁移时应评估 G1、ZGC 或 Shenandoah。
- GC 日志统一为
-Xlog:gc*,旧参数需要逐项核对。 - 升级顺序优先采用:升级依赖 → 在 JDK 8 编译器下清理警告 → 先运行于 JDK 17 → 再切换编译目标。
本章覆盖开发、架构与迁移中有实际影响的正式特性和重要 Preview/Incubator JEP,不机械罗列构建系统、冷门平台端口及纯内部重构。