只讲LTS 版本(8 / 11 / 17 / 21 / 25) 中真正影响生产代码和架构的东西,跳过 6 个月非 LTS 的"实验车道"。
0. 先建立坐标系:为什么只看 LTS
Java 9 之后改成6 个月一个功能版,但只有被标记为 LTS 的版本会获得多年安全补丁与 Bug 修复,生产系统只认 LTS。
LTS 时间线:
Java 8(2014-03)——存量之王,函数式启蒙
Java 11(2018-09)——模块化后的第一个 LTS
Java 17(2021-09)——Spring Boot 3 底线,强封装时代
Java 21(2023-09)——虚拟线程落地,并发范式切换
Java 25(2025-09-16 GA)——最新 LTS,支持到 2033 前后
1. Java 8(2014):函数式与现代 Java 的起点
尽管不是 6 个月节奏下的 LTS,但它是"现代 Java"的分水岭。
语言层
Lambda 表达式(JSR 335):匿名内部类退场,单方法接口用
()->{}解决Stream API(JEP 107):
filter/map/reduce声明式集合处理接口默认方法 / 静态方法:向后兼容地演进 API(如
Collection.stream())Optional:显式表达"可能为空",告别隐式 NPEjava.time(JSR 310):取代Date/Calendar,不可变、时区清晰
库与 JVM
新日期时间、Base64 标准库、JVM 层面 Nashorn(已废弃)等
一句话:Java 8 让 Java 从"面向对象老炮"变成"也能写函数式"的语言。
2. Java 11(2018):模块化清理 + 现代化基础设施
从 11 开始,LTS 进入"做减法"阶段。
语言与开发体验
var局部变量推断(JEP 286,10 引入 11 继承):var list = new ArrayList<String>()Lambda 参数可用
var(JEP 323)单文件源码直接运行(JEP 330):
java Hello.java不用先javacHTTP Client 转正(JEP 321):
java.net.http支持 HTTP/2、WebSocket,替代HttpURLConnection
JDK 自身瘦身
移除 Java EE 模块(JAXB/JAX-WS 等,JEP 320) → 交棒 Jakarta EE(这是 8→11 升级最大坑)
移除 CORBA、JavaFX 分离
Flight Recorder 开源(JEP 328)、TLS 1.3(JEP 332)
ZGC / Shenandoah 以实验形态登场
一句话:11 是"拆掉历史包袱 + 补齐现代网络/诊断工具"的 LTS。
3. Java 17(2021):类型系统收紧 + Spring Boot 3 基线
语言(多数在 14–16 预览后于 17 附近定型)
Records(16 转正):
record Point(int x, int y){}一行写完不可变数据载体Pattern Matching
instanceof(16 转正):if (o instanceof String s) { s.length() }Text Blocks(15 转正):
""" ..."""多行字符串Sealed Classes(JEP 409):
sealed interface A permits B, C {}精确控制谁能继承Switch 表达式(14 转正):
yield/->箭头,无 fall-through
JVM 与边界
强封装 JDK 内部 API(JEP 403):
--illegal-access默认 deny,sun.misc.Unsafe反射受限(老框架升级主要雷区)ZGC 正式可用、G1 优化
增强随机数发生器(JEP 356)、移除 RMI Activation
UTF-8 在 18 成为默认,但 17 项目常已显式统一
一句话:17 把"类型更安全 + 代码更短 + 反射黑魔法受限"钉死,是当代企业基线。
4. Java 21(2023):并发范式革命
并发(Project Loom)
虚拟线程正式 GA(JEP 444):JVM 托管轻量线程,初始栈几 KB,
Executors.newVirtualThreadPerTaskExecutor()轻松百万并发,阻塞自动让出载体线程Scoped Values(预览,JEP 446):替代
ThreadLocal,配合虚拟线程无泄漏Structured Concurrency(预览,JEP 453):把一批子任务当整体取消/报错
语言
Pattern Matching for
switch(JEP 441):case Integer i when i>0 -> ...、支持 null、守卫、类型解构Record Patterns(JEP 440):
if (o instanceof Point(int x, int y))Sequenced Collections(JEP 431):
SequencedCollection/Set/Map统一首尾访问与反转未命名变量/模式(预览)
JVM
分代 ZGC(JEP 439):年轻代更频、老年代更少,亚毫秒停顿 + 吞吐提升
弃用 Windows 32 位 x86
一句话:21 让"高并发 I/O 代码写起来像同步阻塞,跑起来像协程"成为现实。
5. Java 25(2025-09 LTS):极简语法 + 内存/启动/可观测性
Java 25 包含 18 个 JEP,下面是生产相关重点(预览特性标注 Preview)。
语言易用性
Compact Source Files & Instance Main Methods(JEP 512):Hello World 不再需要
public class+static mainvoid main() { System.out.println("hi from Java 25"); }Module Import Declarations(JEP 511):
import module java.base;一次性引入模块所有包Flexible Constructor Bodies(JEP 513):
super()之前可写参数校验/本地计算Primitive Types in Patterns(JEP 507,第三预览):
instanceof/switch/ 模式匹配支持基本类型Stable Values(JEP 502,预览):比
final灵活、比 lazy holder 高效的不可变延迟初始化
并发与线程
Scoped Values 正式转正(JEP 506):虚拟线程上下文传递首选
Structured Concurrency 第五预览(JEP 505)
JVM 性能
Compact Object Headers(JEP 519):对象头 12–16B → 8B,堆占用降 10–20%、缓存命中提升
Generational Shenandoah(JEP 521):分代模式转正,停顿进一步下降
AOT Command-Line Ergonomics(JEP 514)+ AOT Method Profiling(JEP 515):Project Leyden 方向,容器/Serverless 启动更快
JFR 增强:CPU-time profiling(实验,JEP 509)、Cooperative Sampling(JEP 518)、Method Timing & Tracing(JEP 520)
移除 32 位 x86 端口(JEP 503)
安全与库
Key Derivation Function API(JEP 510):PBKDF2/HKDF 标准化
PEM Encodings(JEP 470,预览):密钥/证书 PEM 编解码进标准库
Vector API 第十孵化(JEP 508,AI/数值计算向)
一句话:25 是"新人写得像脚本、老手拿到底层内存红利、安全对齐后量子"的 LTS。
6. 一张 LTS 断层对照表
维度 | 8 | 11 | 17 | 21 | 25 |
|---|---|---|---|---|---|
函数式 | Lambda/Stream | +var | +Records/密封类 | +模式switch | +基元模式/极简main |
并发 | OS线程 | OS线程 | OS线程 | 虚拟线程GA | Scoped Values GA |
网络 | HttpURLConnection | HttpClient | HttpClient | HttpClient | HttpClient |
GC默认 | Parallel | G1 | G1 | G1/分代ZGC | G1/分代ZGC/分代Shenandoah |
对象头 | 12-16B | 同 | 同 | 同 | 8B |
模块/封装 | 无 | JPMS | 强封装 | 强封装 | 模块导入声明 |
安全 | 老TLS | TLS1.3 | 去SM | KEM API | KDF/PEM/后量子铺垫 |
生态基线 | 老Spring | 过渡 | SpringBoot3 | 新项目首选 | 2025+新LTS |
7. 升级路径建议(避坑向)
遗留系统:8 → 11 先解决
javax.xml.bind等 Jakarta 迁移、反射--add-opens平稳现代化:11 → 17 吃 Records/密封类,Spring Boot 3 必须 17+
高并发新服务:直接 21,虚拟线程 + 分代 ZGC
云原生/AI 边车/长期基线:21 → 25,注意预览特性(结构化并发、基元模式)别进生产字节码
每次只跨一个 LTS,用
jdeprscan扫废弃 API
8. 结语
Java 8 给了"写得短",11 给了"跑得干净",17 给了"类型稳",21 给了"并发轻",25 给了"内存小、启动快、门槛低"。
LTS 的价值不是"特性最多",而是公司敢把它写进 5 年架构基线。2026 年的新项目,如果没历史负担,Java 21 是稳妥起点,Java 25 是前瞻起点。