Java 语言版本演进与特性概要

Java 语言版本演进与特性概要

本文按时间线归纳 Java SE / JDK 各阶段代表性语言与平台特性,并标出常见 LTS(长期支持) 版本。细节以各版本 Release NotesJEP(JDK Enhancement Proposal) 为准;预览(Preview)/ 孵化(Incubator) 特性在相邻版本中可能更名、调整或撤回。

发布节奏(2018 年起常见模式) :约 每六个月 发布一个特性版本;LTS 由 Oracle / OpenJDK 路线图书面约定(近年常见为 8、11、17、21 ,后续以 Oracle Java SE Support Roadmap 等官方页面为准),非 LTS 版本通常仅短期更新支持,生产选型以 LTS 为主。

目录


版本节奏与 LTS 一览

半年节奏 + LTS
经典阶段
JDK 5
JDK 8 LTS
11 LTS
17 LTS
21 LTS

JDK 9 起,特性版 约每 6 个月 发布一次;LTS 在路线图中显式标定(17→21 等近年常见为约 两年 一档;8→11、11→17 间隔更长),各厂商据此提供延长支持与安全更新。非 LTS 特性版通常仅维护到下一版本发布后较短窗口,生产环境默认对齐 LTS
三月特性版
九月特性版
次年三月...
其中少数版本被定为 LTS(见官方路线图)

版本 约发布时间 备注
JDK 8 2014 广泛使用的 LTS,函数式与 java.time
JDK 11 2018 LTS,模块裁剪后基线、新 HTTP Client 等
JDK 17 2021 LTS,密封类、增强模式匹配等语言特性定型一批
JDK 21 2023 LTS,虚拟线程(Project Loom)等
维度 特性版(非 LTS) LTS
支持周期 短,适合尝鲜与 CI 多版本矩阵 长,适合线上与长期合同
升级频率 低;跨 LTS 迁移可规划 2~3 年窗口
厂商补丁 依赖发行版政策 多数商业/社区发行版提供多年安全修复

JDK 25 等后续 LTS 编号与月份以 Oracle Support Roadmap / OpenJDK 公告为准,上表不预见具体未发布能力。


OpenJDK、JDK 与常见发行版

Java SE 平台规范JCP 维护;OpenJDK 是参考实现的主干源码社区。**「JDK」**在工程语境下常指「某家打包好的可运行 Java 开发/运行套件」,与「是否收费/支持条款」无关------需看具体发行版。

类型 说明
OpenJDK 构建 基于 OpenJDK 源码树,由不同组织构建与签名(如 Eclipse TemurinAmazon CorrettoMicrosoft Build of OpenJDK 等)
Oracle JDK Oracle 分发与支持策略以官网为准;与 OpenJDK 同源演进但许可/组件可能不同
GraalVM / Native Image 侧重 AOT、多语言;版本号仍跟踪某 JDK 基线,迁移时需单独对照

选型时除 语言特性 外,还应核对:TLS/加密组件策略长期安全更新容器镜像来源许可证


经典阶段(1.0~8)

JDK 1.0~1.4:基础平台

版本 代表性内容(节选)
1.0(1996) 首个正式平台,虚拟机 + 基础类库
1.1(1997) 内部类、JavaBeans、RMI、反射、JDBC
1.2 / Java 2(1998) 集合框架、Swing、HotSpot 相关演进
1.3(2000) HotSpot 成为默认 VM(常见发行版叙事)
1.4(2002) java.util.regexNIO(Buffer/Channel)、IPv6、日志 API 等

JDK 5(2004):语言现代化第一站

特性 说明
泛型 参数化类型,编译期擦除实现
注解 元数据,影响框架与工具链
自动装箱/拆箱 基本类型与包装类转换
枚举 类型安全枚举
增强 for、varargs 语法糖
java.util.concurrent 并发集合与执行器框架

JDK 6(2006)

平台成熟与性能调优为主(如编译器、监控、脚本引擎 javax.script 等);Oracle 收购 Sun 后商业支持策略变化,对 JDK 分发有影响(与语言特性正交)。

JDK 7(2011)

类别 内容
语言 switch 字符串try-with-resources菱形 <>、二进制/下划线数字字面量等
NIO.2java.nio.file)、ForkJoinPool

JDK 8(2014,LTS)

类别 内容
语言 Lambda方法引用接口 default/static 方法
Stream APIjava.timeOptional
JVM PermGen 移除 ,类元数据等主要由 Metaspace 管理(具体行为随 GC/实现而变)

现代阶段(9 起)

发布模型

  • JDK 9 :模块系统(JPMS )、jlink 、G1 默认 GC 等;版本号改为时间驱动前的关键一站。
  • JDK 10~ :通常每版带若干语言/JVM/库 JEP;非 LTS 仅适合试用与短期验证。

按版本简表(9~24,节选)

版本 类型(常见划分) 代表性方向(节选)
9 特性版 模块系统JShell、集合工厂方法、G1 默认
10 非 LTS var 局部变量类型推断
11 LTS HTTP Client (标准)、单文件源码运行 、字符串辅助方法;移除 Java EE / CORBA 等模块(后续 EE 走 Jakarta EE
12~14 非 LTS Switch 表达式文本块Recordinstanceof 模式匹配等多为预览迭代
15 非 LTS 文本块、Record 等转正;密封类预览
16 非 LTS instanceof 模式匹配等;Vector API(孵化)
17 LTS 密封类 转正;强封装 JDK 内部 APIFFM 前身(孵化)
18 非 LTS 默认字符集 UTF-8 、简易 jwebserver
19~20 非 LTS 虚拟线程结构化并发 等预览/孵化迭代
21 LTS 虚拟线程 等进入正式特性;记录模式Scoped Values 等仍多处于预览/演进
22~24 非 LTS 多文件源码运行、语言小步调整、Vector API / Gatherers 等持续演进;SecurityManager 弃用移除按 JEP 分阶段

上表中「转正」指在该版本以正式语言或平台特性发布;具体 JEP 编号与变更请以 JDK 发布说明 为准。


模块系统(JPMS)提要

JDK 9 引入 Java Platform Module System ,核心文件为模块路径上的 module-info.java

概念 说明
module 命名单元,显式 requires / exports / opens
classpath vs modulepath 模块化后大量库仍可在 classpath;混用时需注意拆包与可读性
强封装 JDK 16+ 起默认强封装 JDK 内部包 (如 sun.misc),迁移时常需改依赖或通过 --add-opens 等临时手段(应逐步消除)
jlink 可按模块裁剪 自定义运行时镜像(服务端/容器场景)

JDK 8 → 11 的多数「踩坑」来自:非法反射访问被移除的 EE 模块工具链与容器基线 未同步。
JDK 8

classpath 世界
JDK 9+

module-info / 模块路径
JDK 16+

内部 API 强封装


JVM / GC 与平台特性(线索)

语言版本与 JVM 行为 并行演进;以下为查阅 JEP 时的常见索引(非完整列表)。

方向 与版本相关的线索(需查对应 JEP)
GC G1 默认与调参演进;ZGCShenandoah 等低延迟路线;分代 ZGC 等
性能 CDS/AppCDS 类数据共享、启动优化;JIT / AOT(部分路线已调整或移除,以发布说明为准)
观测 JFR 默认可用范围、jcmd 子命令扩展
向量/Native Vector API(孵化→演进)Foreign Function & Memory(FFM) 替代 JNI 的方向

生产变更应同时阅读 Release Notes 中的 JDK 行为变更JDK 18+ UTF-8 默认 等平台级条目。


按 LTS 锚点的特性聚类

便于对照「从上一 LTS 升到下一 LTS」大致会跨过哪些能力:

升级路径 可重点关注的能力方向
8 → 11 模块可见性、var、新 HTTP 客户端、字符串/API 清理、GC 与容器感知等运维向变化
11 → 17 Record、文本块、密封类、模式匹配雏形、FFM 路线、内部 API 强封装与依赖迁移
17 → 21 虚拟线程与并发编程模型、GC/JVM 持续改进、语言模式匹配与集合工厂等继续完善

选型与升级建议

场景 建议
新建长期维护服务 优先当前 最新 LTS (编写时常见为 21),并以官方路线图确认下一 LTS。
试用语言/JVM 前沿 可选用当前非 LTS,但需接受短支持周期与行为微调。
滞留 JDK 8 至少评估 11 的安全与协议支持;若条件允许,直接对齐 17 或 21 可减少多次迁移成本。
库与框架 升级前核对 Spring / Jakarta / 字节码库等对字节码版本与模块的要求。

升级检查清单(工程向)

步骤 检查项
1 目标 LTSOpenJDK 发行版(镜像、支持年限、许可证)
2 字节码级别 :构建 source/target--release 与运行 JDK 的关系
3 依赖jar:是否访问 JDK 内部 API;是否需替换为受支持 API
4 反射 / 注入框架 :是否需 --add-opens;能否通过升级框架版本消除
5 ** Jakarta EE** 命名空间与 Spring Boot 主版本矩阵
6 CI:并行保留旧 LTS 跑回归,直至全量切换
7 观测:JFR、GC 日志、HeapDump 在新 GC 下的行为差异

参考链接

本文仅作纲要式 梳理,实施升级请以目标 JDK 的 Migration Guide 与依赖项兼容性矩阵为准。

相关推荐
励志的小陈2 小时前
C++入门
开发语言·c++
砍光二叉树2 小时前
【设计模式】行为型-观察者模式
java·观察者模式·设计模式
庞轩px2 小时前
AQS(AbstractQueuedSynchronizer)源码深度解析:从CLH队列到ReentrantLock实现
java·并发编程·juc·aqs·reentrantlock
江湖中的阿龙2 小时前
深入理解 CAS:Java 无锁并发核心原理、缺陷与应用场景详解
java·开发语言
xianjian09122 小时前
Java进阶-在Ubuntu上部署SpringBoot应用
java·spring boot·ubuntu
进击的荆棘2 小时前
C++起始之路——继承
开发语言·c++
拾荒的小海螺2 小时前
JAVA:Spring Boot3 集成 Spring AI 实现 Prompt 提示词工程
java·spring boot·spring
小旭95272 小时前
SpringBoot 整合 MyBatis 与自动配置原理详解
java·spring boot·后端·spring·intellij-idea·mybatis
恼书:-(空寄2 小时前
Seata TCC 生产级(空回滚+悬挂+幂等)+ AT/TCC 混合使用
java·seata·分布式事务