三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从 Java 8 到 Java 25:LTS 长期支持版核心新特性全景解读

从 Java 8 到 Java 25:LTS 长期支持版核心新特性全景解读

只讲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:显式表达"可能为空",告别隐式 NPE

  • java.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不用先javac

  • HTTP 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 Matchinginstanceof(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 forswitch(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 main

    void 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 是前瞻起点

← 返回列表