Java 由 Sun Microsystems 于 1995 年发布,2010 年起由 Oracle 维护。讨论「版本」时容易混用 J2SE 1.4、Java 5、Java SE 8、JDK 17 等说法——它们分属平台品牌、对外版本号、运行时版本字符串、class 文件格式等不同层次。下文先列发布简史与各版本文档链接,再分节说明命名如何演变。

发布简史

时间 版本 备注
1995-05 Java 1.0 语言与平台首次发布 → JDK 1.0
1997-02 Java 1.1 内部类、JAR、RMI 等 → JDK 1.1
1998-12 Java 1.2 Java 2 Platform;Swing、集合框架
1999-04 HotSpot 首次发布 独立 JVM 产品,可配 JDK 1.2 → HotSpot
1999-06 J2SE / J2EE / J2ME 三版平台划分
2000-05 Java 1.3 HotSpot 成为 JDK 默认 VM(Classic 仍可选)
2002-02 J2SE 1.4 assert、NIO、regex、JUL;Classic VM 移除 → JDK 1.4
2004-02 J2SE 1.5 Beta Tiger 公开 Beta(泛型、注解等);早于 GA
2004-09 Java 5 泛型、enum、for-each、注解、JUC → JDK 5
2005-06 Java SE 6 公布 J2SE 更名为 Java SE
2006-12 Java SE 6 GA 脚本引擎、Web Service 增强
2011-07 Java SE 7 GA NIO.2、ForkJoin → JDK 7
2014-03 Java SE 8 GA Lambda、Stream → JDK 8;后被 Oracle 追溯认定为 LTS
2017-09 Java SE 9 GA 模块系统、半年发布模型 → JDK 9
2018-03 Java SE 10 短期版本
2018-09 Java SE 11 新发布策略下首个 LTS
2019~2021 Java 12~16 短期版本
2021-09 Java SE 17 LTS 间隔改为每 2 年 → JDK 17
2022~2023 Java 18~20 短期版本
2023-09 Java SE 21 → JDK 21 相对 JDK 17 的变化
2024~2025 Java 22~24 短期版本
2025-09 Java SE 25 → JDK 25 相对 JDK 21 的变化
2026-03 Java SE 26 → JDK 26 相对 JDK 25 的变化
2027-09 Java SE 29(计划) 下一 LTS

2010 年 Oracle 收购 Sun;2017 年起 OpenJDK 成为参考实现。发行版选型见 OpenJDK;企业版演变见 Java EE。


四个层次,不要混用

层次 问的是什么 例子
平台品牌 产品叫什么 J2SE 1.4 → Java SE 6
对外版本号 口头/文档里的主版本 Java 1.4 → Java 5 → Java 17
java.version JVM 报告的运行时版本字符串 1.4.2_19 → 1.8.0_xxx → 17.0.x
class major version .class 文件格式版本 1.4 → 48;17 → 61(完整对照)

做版本判断或读 GC 日志时,先分清问的是哪一层。


平台品牌:J2SE → Java SE

1998 年 JDK 1.2 发布时,Sun 将这一代平台整体称为 Java 2 Platform,并拆成三版:

旧称 新称(约 2005~2006 起) 用途
J2SE Java SE 标准版(桌面、服务器)
J2EE Java EE 企业版(2017 年后捐给 Eclipse,称 Jakarta EE)
J2ME Java ME 微型版(嵌入式、手机)

「Java 2」里的 2 表示平台代际(1.2 大改),不是版本号 2.0。1.3、1.4 时代仍叫 J2SE 1.x,名称容易让人困惑。

转变时间线:

  • 2004,JDK 5:对外主推 Java 5,文档中仍有 J2SE 5.0 旧称
  • 2005~2006,JDK 6:官方稳定使用 Java SE 6,J2 前缀基本退出

详见 Java EE 中对 J2 时代的说明。


对外版本号:1.x → Java 5

时期 对外叫法 内部/编译器版本
1996~2004 Java 1.0~1.4 / J2SE 1.x 1.0~1.4
2004 起 Java 5(不再强调 1.5) 仍 -source 1.5,java.version 为 1.5.0_xxx
2006~2017 Java 6、7、8 1.6.0_xxx~1.8.0_xxx
2017 起 Java 9、11、17… JDK 9 起 java.version 也改为 9、11 等(见下节)

JDK 5 是对外主版本号命名的起点;JDK 9 是 java.version 字符串去掉前导 1. 的起点(JEP 223)。


java.version 字符串

JDK java.version 示例 说明
1.4 1.4.2_19 对内对外均 1.x
5~8 1.5.0_xxx~1.8.0_xxx 对外已称 Java 5/8,字符串仍 1.x
9+ 9、11.0.2、17.0.9 与对外主版本号一致
9+ 更新版 9.0.1、11.0.16 $MAJOR.$MINOR.$SECURITY scheme

代码里解析版本:JDK 8 及以前需处理 1.8 这种前缀;JDK 9 起可直接读主版本号。详见 JDK 9。


LTS 与发布节奏

LTS(Long-Term Support,长期支持版) 是 2017 年 Java 9 起新发布模型的一部分,与 J2SE→Java SE、JEP 223 发生在同一时期,但解决的是不同问题:后者管怎么叫版本,LTS 管发布后支持多久。

2017 年之前:没有 LTS 概念

1.4 → 5 → 6 → 7 → 8 大约 2~3 年一版,Oracle/Sun 对主流版本提供较长商业支持,但不区分「LTS 版」和「短期版」——每一版都是「大版本」,没有半年一发的 feature release。

2017 年起:半年一发 + LTS 分层

Java 9(2017-09) 起 Oracle 宣布新节奏:

类型 发布间隔 OpenJDK 支持 典型用途
Feature Release 每 6 个月 约 6 个月(至下一版发布) 尝鲜、验证
LTS 最初约每 3 年;JDK 17 起改为每 2 年 多年(厂商可延长) 生产环境

同一时期还伴随:模块系统(JDK 9)、java.version 去 1. 前缀(JEP 223)、OpenJDK 与 Oracle JDK 逐步对齐。

新模型下第一个 LTS 是 JDK 11(2018-09)。JDK 8 后被 Oracle 追溯认定为 LTS,但发布时尚无 LTS 概念,属于旧节奏最后一版。路线图见 JDK 26 相对 JDK 25 的变化 及 Oracle Java SE Support Roadmap。


参考


class 文件 major version

编译器 -target 决定生成的 class 格式。常见对照:

Java 版本 major version
1.2 46
1.3 47
1.4 48
5 49
6 50
7 51
8 52
9 53
10 54
11 55
12 56
13 57
14 58
15 59
16 60
17 61
18 62
19 63
20 64
21 65
22 66
23 67
24 68
25 69
26 70

可用 javap -verbose Foo.class | grep major 查看。反编译或加载高版本 class 到低版本 JVM 时会报 UnsupportedClassVersionError。

维护记录

时间 修改内容 原因
2026-06-21 发布简史补充 HotSpot 1999 发布;区分 1.3 默认与 1.4 移除 Classic VM 与 hotspot.md 时间线对齐
2026-06-24 发布简史补充 J2SE 1.5 Beta(2004-02);Java 5 行注明注解 与 jdk-5.md Tiger 时间线对齐