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++)和内存的互操作性,部分落地
ZGCZGC,基于染色指针的低延迟gc,已完成(维护中)
Lilliput对象头瘦身,部分落地
Leyden启动与预热优化,持续演进
ShenandoahShenandoah GC,基于转发指针的低延迟gc,已完成(维护中)
Valhalla引入值类型,早期阶段
Galahad将 GraalVM JIT 集成进 OpenJDK 替代 C2,早期阶段

特性对照表(平摊)

LTS版本分类特性JEP编号Project
Java 8JVM元空间替代永久代JEP 122
Java 8JVMG1 GC改进JEP 156
Java 8语法Lambda表达式JEP 126Lambda
Java 8语法接口默认方法JEP 126Lambda
Java 8核心类库Stream APIJEP 107
Java 8核心类库java.time包JEP 150
Java 8核心类库OptionalJEP 107
Java 8核心类库CompletableFutureJEP 155
Java 8JDK工具jjs (Nashorn)JEP 174
Java 8JDK工具jdeps依赖分析
Java 11JVMG1成为默认GCJEP 248
Java 11JVM统一JVM日志JEP 158
Java 11JVMZGC实验版PreviewZGC
Java 11JVM紧凑字符串JEP 254
Java 11JVMAppCDSJEP 310Leyden
Java 11语法模块系统JEP 261Jigsaw
Java 11语法私有接口方法JEP 213
Java 11语法局部变量类型推断JEP 286Amber
Java 11核心类库集合工厂方法JEP 269
Java 11核心类库Process API增强JEP 102
Java 11核心类库Reactive Streams (Flow)JEP 266
Java 11核心类库HTTP ClientJEP 321
Java 11核心类库VarHandlesJEP 193
Java 11JDK工具jlink链接器JEP 282Jigsaw
Java 11JDK工具jshell REPLJEP 222
Java 11JDK工具单文件源代码启动JEP 330
Java 11JDK工具移除JavaFX、CORBAJEP 320
Java 11JDK工具Flight Recorder开源JEP 328
Java 17JVMZGCJEP 373ZGC
Java 17JVMShenandoahJEP 379Shenandoah
Java 17JVM动态CDS归档JEP 350Leyden
Java 17语法密封类(Sealed Classes)JEP 409Amber
Java 17语法Records记录类型JEP 395Amber
Java 17语法Switch表达式JEP 361Amber
Java 17语法文本块(Text Blocks)JEP 378Amber
Java 17语法instanceof模式匹配JEP 394Amber
Java 17JVM改进NullPointerException消息JEP 358
Java 17核心类库Socket API重构JEP 353, 373
Java 17JDK工具jpackage打包工具JEP 392
Java 17JDK工具移除Nashorn引擎JEP 372
Java 17JDK工具强封装JDK内部APIJEP 403Jigsaw
Java 21JVM分代ZGCJEP 439ZGC
Java 21JVM虚拟线程JEP 444Loom
Java 21语法Record模式匹配JEP 440Amber
Java 21语法Switch模式匹配JEP 441Amber
Java 21核心类库Sequenced CollectionsJEP 431
Java 21核心类库UTF-8默认字符集JEP 400
Java 21JDK工具简单Web服务器JEP 408
Java 25JVM对象头压缩JEP 519Lilliput
Java 25JVMZGC默认分代JEP 474ZGC
Java 25JVM分代ShenandoahJEP 521Shenandoah
Java 25JVMAOT缓存简化JEP 483, 514Leyden
Java 25JVMAOT方法性能分析JEP 515Leyden
Java 25语法外部函数与内存API(FFM)JEP 454Panama
Java 25语法柔性构造函数体JEP 513Amber
Java 25核心类库结构化并发PreviewLoom
Java 25核心类库Stream GatherersJEP 485
Java 25核心类库Scoped ValuesJEP 506Loom
Java 25核心类库Class-File APIJEP 484
Java 25JDK工具JFR增强JEP 509, 518, 520
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐