Java LTS版本重要升级特性对照表
·
Java LTS版本重要升级特性对照表
简介
介绍自 java8 以来每个稳定版本都提升了什么新特性。
本文只列出LTS版本,具体包括 Java 8, 11, 17, 21, 25 非LTS版本功能归入下一个LTS版本,不会列出绝大多数预览特性
本文只统计 JVM、重要语法、核心类库、JDK工具的升级特性,不包含某些语法糖语法和不重要类库的升级以及 bug 修复,不包含对开发者无感的底层升级
本文对升级特定的分类是作者按照开发者视角的主观分类,与官方口径不完全一致
特性对照表
| LTS版本 | JVM升级 | 语法 | 核心类库 | JDK工具 |
|---|---|---|---|---|
| Java 8 | 元空间替代永久代122 G1 GC改进156 | Lambda表达式126 Lambda 接口默认方法126 Lambda | Stream API107 java.time包150 Optional107 CompletableFuture155 | jjs (Nashorn)174 jdeps依赖分析 |
| Java 11 (含9/10特性) | G1成为默认GC248 统一JVM日志158 ZGC实验版Preview ZGC 紧凑字符串254 AppCDS310 Leyden | 模块系统261 Jigsaw 私有接口方法213 局部变量类型推断286 Amber | 集合 API 增强269 Process API增强102 Reactive Streams (Flow)266 HTTP Client321 VarHandles193 | jlink链接器282 Jigsaw jshell REPL222 单文件源代码启动330 移除JavaFX、CORBA320 Flight Recorder开源328 |
| Java 17 (含12-16特性) | ZGC333 ZGC Shenandoah379 动态 CDS 归档350 Leyden 改进NullPointerException消息358 | 密封类(Sealed Classes)409 Amber Records记录类型395 Amber Switch表达式361 Amber 文本块(Text Blocks)378 Amber instanceof模式匹配394 Amber | Socket API重构353,373 | jpackage打包工具392 移除Nashorn引擎372 强封装JDK内部API403 Jigsaw |
| Java 21 (含18-20特性) | 分代ZGC439 ZGC 虚拟线程444 Loom | Record模式匹配440 Amber Switch模式匹配441 Amber | Sequenced Collections431 UTF-8默认字符集400 | 简单Web服务器408 |
| Java 25 (含22-24特性) | 对象头压缩519 Lilliput ZGC默认分代474 ZGC 分代 Shenandoah521 AOT缓存简化483,514 Leyden AOT方法性能分析515 Leyden | 外部函数与内存 API(FFM)454Panama 柔性构造函数体513 Amber | 结构化并发Preview Loom Stream Gatherers485 Scoped Values506 Loom Class-File API484 | JFR增强509,518,520 |
考虑到信息密度该表使用上标标注,本文末尾会附带一张平摊的该表
上标标记该功能的 JEP 号和 Project 出处(若有)
只列出最终版本的 JEP 号
包含了极少量的重要的预览功能,使用 Preview 标注
某些功能横跨了多个 JEP,使用逗号分隔标注
AppCDS、动态 CDS 早于 Leyden 项目正式立项,考虑到 Leyden 项目的目标仍将其归为 Leyden 项目
Project
现代 JVM 的痛点都是深水区的结构性问题,因此从升级表能看到,大部分重量级升级都是 Project 主导的,单 JEP 处理的多半都是一些小修小补或者边缘 API 的工作,因此这里简单介绍一下每个 Project(同样的只列出干大活的Project)
| Project | 目标 |
|---|---|
| Lambda | 函数式编程支持,已完成 |
| Jigsaw | 模块化,已完成 |
| Amber | 语法现代化,持续演进 |
| Loom | 轻量级并发,已完成(维护中) |
| Panama | 提高 java 与底层代码(C、C++)和内存的互操作性,部分落地 |
| ZGC | ZGC,基于染色指针的低延迟gc,已完成(维护中) |
| Lilliput | 对象头瘦身,部分落地 |
| Leyden | 启动与预热优化,持续演进 |
| Shenandoah | Shenandoah GC,基于转发指针的低延迟gc,已完成(维护中) |
| Valhalla | 引入值类型,早期阶段 |
| Galahad | 将 GraalVM JIT 集成进 OpenJDK 替代 C2,早期阶段 |
特性对照表(平摊)
| LTS版本 | 分类 | 特性 | JEP编号 | Project |
|---|---|---|---|---|
| Java 8 | JVM | 元空间替代永久代 | JEP 122 | — |
| Java 8 | JVM | G1 GC改进 | JEP 156 | — |
| Java 8 | 语法 | Lambda表达式 | JEP 126 | Lambda |
| Java 8 | 语法 | 接口默认方法 | JEP 126 | Lambda |
| Java 8 | 核心类库 | Stream API | JEP 107 | — |
| Java 8 | 核心类库 | java.time包 | JEP 150 | — |
| Java 8 | 核心类库 | Optional | JEP 107 | — |
| Java 8 | 核心类库 | CompletableFuture | JEP 155 | — |
| Java 8 | JDK工具 | jjs (Nashorn) | JEP 174 | — |
| Java 8 | JDK工具 | jdeps依赖分析 | — | — |
| Java 11 | JVM | G1成为默认GC | JEP 248 | — |
| Java 11 | JVM | 统一JVM日志 | JEP 158 | — |
| Java 11 | JVM | ZGC实验版 | Preview | ZGC |
| Java 11 | JVM | 紧凑字符串 | JEP 254 | — |
| Java 11 | JVM | AppCDS | JEP 310 | Leyden |
| Java 11 | 语法 | 模块系统 | JEP 261 | Jigsaw |
| Java 11 | 语法 | 私有接口方法 | JEP 213 | — |
| Java 11 | 语法 | 局部变量类型推断 | JEP 286 | Amber |
| Java 11 | 核心类库 | 集合工厂方法 | JEP 269 | — |
| Java 11 | 核心类库 | Process API增强 | JEP 102 | — |
| Java 11 | 核心类库 | Reactive Streams (Flow) | JEP 266 | — |
| Java 11 | 核心类库 | HTTP Client | JEP 321 | — |
| Java 11 | 核心类库 | VarHandles | JEP 193 | — |
| Java 11 | JDK工具 | jlink链接器 | JEP 282 | Jigsaw |
| Java 11 | JDK工具 | jshell REPL | JEP 222 | — |
| Java 11 | JDK工具 | 单文件源代码启动 | JEP 330 | — |
| Java 11 | JDK工具 | 移除JavaFX、CORBA | JEP 320 | — |
| Java 11 | JDK工具 | Flight Recorder开源 | JEP 328 | — |
| Java 17 | JVM | ZGC | JEP 373 | ZGC |
| Java 17 | JVM | Shenandoah | JEP 379 | Shenandoah |
| Java 17 | JVM | 动态CDS归档 | JEP 350 | Leyden |
| Java 17 | 语法 | 密封类(Sealed Classes) | JEP 409 | Amber |
| Java 17 | 语法 | Records记录类型 | JEP 395 | Amber |
| Java 17 | 语法 | Switch表达式 | JEP 361 | Amber |
| Java 17 | 语法 | 文本块(Text Blocks) | JEP 378 | Amber |
| Java 17 | 语法 | instanceof模式匹配 | JEP 394 | Amber |
| Java 17 | JVM | 改进NullPointerException消息 | JEP 358 | — |
| Java 17 | 核心类库 | Socket API重构 | JEP 353, 373 | — |
| Java 17 | JDK工具 | jpackage打包工具 | JEP 392 | — |
| Java 17 | JDK工具 | 移除Nashorn引擎 | JEP 372 | — |
| Java 17 | JDK工具 | 强封装JDK内部API | JEP 403 | Jigsaw |
| Java 21 | JVM | 分代ZGC | JEP 439 | ZGC |
| Java 21 | JVM | 虚拟线程 | JEP 444 | Loom |
| Java 21 | 语法 | Record模式匹配 | JEP 440 | Amber |
| Java 21 | 语法 | Switch模式匹配 | JEP 441 | Amber |
| Java 21 | 核心类库 | Sequenced Collections | JEP 431 | — |
| Java 21 | 核心类库 | UTF-8默认字符集 | JEP 400 | — |
| Java 21 | JDK工具 | 简单Web服务器 | JEP 408 | — |
| Java 25 | JVM | 对象头压缩 | JEP 519 | Lilliput |
| Java 25 | JVM | ZGC默认分代 | JEP 474 | ZGC |
| Java 25 | JVM | 分代Shenandoah | JEP 521 | Shenandoah |
| Java 25 | JVM | AOT缓存简化 | JEP 483, 514 | Leyden |
| Java 25 | JVM | AOT方法性能分析 | JEP 515 | Leyden |
| Java 25 | 语法 | 外部函数与内存API(FFM) | JEP 454 | Panama |
| Java 25 | 语法 | 柔性构造函数体 | JEP 513 | Amber |
| Java 25 | 核心类库 | 结构化并发 | Preview | Loom |
| Java 25 | 核心类库 | Stream Gatherers | JEP 485 | — |
| Java 25 | 核心类库 | Scoped Values | JEP 506 | Loom |
| Java 25 | 核心类库 | Class-File API | JEP 484 | — |
| Java 25 | JDK工具 | JFR增强 | JEP 509, 518, 520 | — |
更多推荐



所有评论(0)