Java版本历史

自JDK 1.0版本以来，Java语言历经了多次迭代更新，并在基础程式库中持续增添大量类别与包。自J2SE 1.4版本起，Java语言的演变过程交由 Java Community Process（JCP）统一管理，其采用Java规范请求（Java Specification Requests，简称JSRs）的方式，以建议和确定对Java平台各部分内容的新增与修订工作。Java语言的规则遵循《Java语言规范》（Java Language Specification，简称JLS），针对JLS的任何改动均依据 JSR 901date=20200615213034 进行规范化管理。
除了语言上的变化，多年来Java标准库（JCL）发生了巨大的变化，从JDK 1.0中的几百个类暴增到J2SE 5中的三千多个类。Swing、Java2D等的全新API被加入其中，而许多原本JDK 1.0的类和方法已被弃用。当然，仍然有一些程式可以将Java程式从新版本的Java平台转换为较旧版本（例如Java 5.0降转到1.4）。
Java 7发布后，Oracle承诺回到以前每两年发布一次的发布周期。但在2013年时，Oracle却宣布他们将Java 8延迟一年发表，官方表示是为了修复Java的安全漏洞。
2017年9月，Java 平台的主架构师 Mark Reinhold 发出提议，要求将 Java 的功能更新周期从之前的每两年一个新版本缩减到每六个月一个新版本。该提议获得了通过，并在提出后不久生效。
Java 17, 11, 8 为目前提供支持的 LTS（长期支持）版本；Java 10 是上一个快速发布版本，且已不再被支持。2018年9月，随着 Java 11 的发布，Java 10 自当日起不再被支持。Oracle 将在 2019 年 1 月前为商业用途中的 Java 8 长期支持，而针对非商用的更新将继续提供，直至 2020 年 12 月；此外，AdoptOpenJDK 也为 Java 8 提供免费更新。针对 Java 11 的长期支持将不再由 Oracle 提供，而是改由 OpenJDK 社区提供，例如 Eclipse Adoptium（以前称之为 AdoptOpenJDK）

**JDK Alpha 和 Beta**
第一个1995年发布的alpha和beta Java公开版本，API和ABI非常不稳定。 支援Java Web浏览器被取名为WebRunner。

**JDK 1.0**
第一个版本于1996年1月23日发布，叫做为Oak。而真正第一个稳定的版本JDK 1.0.2，被称作Java 1。

**JDK 1.1**
1997年2月19日发布。新增功能主要包括：- AWT事件模型大规模重新编制- 加入了内部类别- JavaBeans- JDBC- RMI- 能够支援自理的反射能力，在运行时不可能有修改。- 针对 Microsoft Windows 平台上运作的版本，附带由Symantec为JavaSoft生产的JIT编译器- 支持国际化和Unicode，该功能源自Taligent

**J2SE 1.2**
1998年12月8日发布，代号为Playground。 该版本到J2SE 5.0为止的后续版本被更名为Java 2，而版本名称「J2SE」（Java 2平台，标准版）取代JDK以区别J2EE（Java 2平台，企业版） 和J2ME（Java 2 Platform，Micro Edition）基础平台。这是Java的一个非常重要的版本，它将Java平台的大小增加至原先的三倍，在59个程式包中达到了1520个类。主要增加包括：- strictfp 关键字- 主类别中整合了Swing图像化API- 首次为Sun提供的JVM配备JIT编译器- Java plug-in（即 Java Applet）
*Java IDL，一个与CORBA互通的接口描述语言实现- Java集合框架

**J2SE 1.3**
代号为Kestrel。在版本中最著名的改变包括：- 包含了HotSpot JVM（HotSpot JVM第一次被发布是在1999年4月，名为J2SE 1.2 JVM）- 为了支援与CORBA的选择相容性而修改了RMI- Java命名和目录接口（Java Naming and Directory Interface，缩写JNDI）包含在主程式库中（先前为扩充元件的形式）- Java Platform Debugger Architecture (JPDA)- JavaSound- 用于实现动态代理的类

**J2SE 1.4**
代号为Merlin。2002年2月6日释出了 JSR 59date=20201031153626 ，是第一个在JCP下开发的Java平台。主要的变化包括︰- 语言上的改变
** assert 关键字 (在https://web.archive.org/web/20080616233205/http://www.jcp.org/en/jsr/detail?id=41 JSR 41中被指定)- 程式库的改善
** 仿照Perl的正规表示式
** 异常链，允许一个异常来封装原先处于较低级别的异常
** 支援Internet Protocol version 6 (IPv6)
** 非阻塞I/O（取名为Nonblocking Input/Output，NIO）（在  JSR 51date=20110406193102 中被指定）
** 日志API (在 JSR 47date=20201130040225 中被指定)
** 图像 I/O API来读取和写入图片，支持JPEG、PNG等格式
** 整合了XML解析器和XSLT处理器（JAXP）（指定在 JSR 5date=20110129000312 和 JSR 63date=20110102040801 ）
** 整合安全和加密扩充元件(JCE, JSSE, )
** 内置了Java Web Start(Java Web Start 在2001年3月第一次被释出，作为J2SE 1.3的可选组件) (指定在 JSR 56date=20110409202740 )
** 偏好设定 API (java.util.prefs)
Java 1.4开放支源和安全性更新于2008年10月终止。Oracle客户的付费的安全性更新也在2013年2月结束。

**J2SE 5.0**
代号为Tiger。这个在2004年9月30日释出的版本原本以1.5编号，也就是仍然使用内部版本编号。这个数字辈改变是为了「更好地反映成熟度、稳定性、可扩充性和 J2SE 的安全水准」。这个版本是在JSR 176底下被开发。
J2SE 5.0在2008年4月8日进入其即将停止公开更新的期间；2009年11月3日正式不公开开放更新。Oracle客户直到2015年5月都能透过付费的方式取得更新 。
Tiger增加了若干个重要的新语言功能。- 泛型（Generics）： 为集合提供编译期间 （静态） 型别安全，且不须为大多数类型转换 （型别转换） （规范在 JSR 14）- 元资料（Metadata）： 也称作注解。让语言结构（像是类别和方法）能够用额外的资料标记，可以由元资料意识工具处理（规范在 JSR 175）- 自动封装与解封装： 在基本的资料型别（如 int）和基本的的外覆类别 （如 Integer） 之间能够自动转换 （规范在 JSR 201）- 枚举（Enumerations）： 以 enum 关键字创造出一种型别安全，有排序值的清单（如Day.MONDAY、 Day.TUESDAY 等）；以前这只能透过非型别安全的恒定整数或自行撰写的类别来达成 （型别安全的枚举模式） （规范在JSR 201）- 可变参数函数（Varargs）：方法的最后一个参数现在可以用一个类型名称加上三个点宣告（如：void drawtext(String... lines)）；在调用代码中，型别中参数里任何的数字可以被使用，而它们再放在一个阵列来传递给方法，或是其它的调用代码可以传递那个型别的阵列- 强化for each 回圈：for 回圈的语法被用特别的语法扩充了，适用于阵列或Iterable，用于迭代每个成员，如基本的Collection 类别 (规范在 JSR 201)- 改进多执行绪 Java 程式的执行语义；新的 Java 记忆体模型改善了复杂性、 有效性和以前的规格性能- 静态导入
另外也有以下这些对于基本程式库的改善：- 自动给RMI产生桩模块- Swing：新的介面外观，叫做synth- 异步实用工具 在  java.util.concurrent date=20090804195831 套件中- Scanner 类别来解析来自各式各样的输入和缓冲
Java 5是Java的最后一个正式支援Microsoft Windows 98和Windows ME的版本，而Windows Vista是J2SE 5在2009年10月的Java 5生命周期之前支援的Windows的最新版本。
Java 5 Update 5（1.5.0_05）是Java在Windows 95（装了Internet Explorer 5.5 的）和Windows NT 4.0上运行的最后一个版本。
Java 5 最初出现在 Mac OS X 10.4 （Tiger），到了 Mac OS X 10.5 （Leopard）时成为了预设的 Java 版本。

**版本控制系统的改变**
此版本推出了JAVA语言中，一个新的版本控制系统，而旧版本控制系统仍然可以在开发者资源库中继续使用。这种对应关系持续维持到以后的版本 (Java 6 = JDK 1.6, Java 7 = JDK 1.7, 以此类推).

**Java 5 更新**

**Java SE 6**
代号为Mustang。版本发布于2006年12月11日，Sun把原本的名称「J2SE」改为「Java SE」，然后再从版本号中去掉「.0」，而开发者内部编号仍然是1.6.0。这个版本是根据 JSR 270date=20210125121053 开发的。
在发展阶段，新版本大约每一周都会释出一些功能增强和漏洞的修复。Beta版本在2006年2月和6月释出，也就是为什么2006年12月11日变成最终的版本。
本版本包含的主要更改：- 支持旧的Win9x版本下降；非正式地，Java 6 Update 7是Java的最后一个显示为在这些版本的Windows上工作的版本。 这被认为是因为在Update 10版本中的主要更改。- 脚本语言支持（Scripting Language Support）（JSR 223）：用于与脚本语言紧密整合的通用API，以及内建的Mozilla JavaScript Rhino整合。- 核心平台和Swing性能显著的改进。- 透过JAX-WS改善的网路服务支援(JSR 224).- 支援JDBC 4.0 (JSR 221).- Java编译器API (JSR 199)：允许Java程式以写程式的方式选择和呼叫Java编译器的API。- 将JAXB升级到版本2.0：包括StAX解析器的整合。- 支持pluggable annotations (JSR 269).- 改善许多GUI，像是SwingWorker在API中的整合，表格排序和筛选，以及真正的Swing双缓冲（消除模糊区域效果）。- 包含JVM改善：同步和编译器性能优化，新演算法和对现有垃圾收集演算法的升级以及应用程序启动性能。date=November 2011
Java 6可以安装到在64位（Core 2 Duo和更高版本）处理器机器上运行的Mac OS X 10.5（Leopard）。 运行Mac OS X 10.6（Snow Leopard）的32位和64位机器也支援Java 6。
Java 6在2013年2月到了它支援生命周期的尾声，此时所有公开更新（包括安全更新）都计划停止。 Oracle在2013年3月和4月发布了另外两个对Java 6的更新，修补了一些安全漏洞。

**Java 6 更新**
JAVA 6释出后，Sun和后来的Oracle，释出了几个更新，而不更改任何公开的API，增强了终端使用者的可用性或固定的漏洞。Oracle曾声明，自2016 年1月，JAVA 6和其它更旧的版本已无法从Oracle下载；但在此之后，Oracle于其官网重新提供各个旧版本的下载（需要登录Oracle帐户）。
}和Java Web Start应用程式的部署。- Java Kernel，一个小小的安装程式，只包含最常用的JRE类别。 其它套件需要时再自己下载。- 加强更新器。- 增强版本控制和pack200的支援：不再需要伺服器端支援。- Java Quick Starter，用来加强冷却启动时间。- 改进了Windows上的Java2D图形基本元件的表现，使用Direct3D和硬体加速。- 新的Swing look and feel，名为 Nimbus ，建立在synth基础之上。- 下一代的Java插件：applet现在已可在个别的程序中运行，并支持Web Start应用程式的许多功能。
Java SE 6 Update 11
2008-12-03
13个安全性漏洞修正
Java SE 6 Update 12
2008-12-12
没有安全性修复；64位元的Java插件（仅适用于64位元的网页浏览器）；支援Windows Server 2008；图形和JavaFX应用程式的性能改进
Java SE 6 Update 13
2009-03-24
7个安全性漏洞修复，稍作修改JNDI存取LDAP中的Java物件，JMX变更（createMBeanunregisterMBean），添加了4个新的根凭证
Java SE 6 Update 14
2009-05-28
HotSpot VM 14. 此版本包括对JIT编译器的大量性能更新，用于64位元机器的压缩指标，以及对G1（Garbage First）低暂停的垃圾回收器的支援。
-XX:+DoEscapeAnalysis 选项直接指向HotSpot JIT compiler以使用escape analysis来决定本地端物件是否可以被分配到stack上而不是heap里
一些开发人员已经注意到这个版本中引入的一个问题，它导致除错器似乎是随意地错过断点（breakpoints）。Sun有一个相应的漏洞，也是一个追踪问题。 解决方法适用于客户端和伺服器端的虚拟机。 使用-XX:+UseParallelGC 选项将可以避免错误。另一个解决方案是降版到update 13，或是升级到update 16。
Java SE 6 Update 15
2009-08-04
加入了patch-in-place 功能
Java SE 6 Update 16
2009-08-11
修复了update 14中导致除错器错过断点的问题。
Java SE 6 Update 17
2009-11-04
安全修复；两个新的根凭证
Java SE 6 Update 18
2010-01-13
没有安全性漏洞修复；Hotspot VM 16；支援Ubuntu 8.04 LTS桌面版、SLES 11、Windows 7、Red Hat Enterprise Linux 5.3、Firefox 3.6、VisualVM 1.2；更新过的Java DB；许多性能改进
Java SE 6 Update 19
2010-03-30
安全性漏洞修复；根凭证更动：加入七个新的，删除三个，五个替换为更强的签署演算法；对TLS重新谈判攻击的临时修补
Java SE 6 Update 20
2010-04-15
2个安全性漏洞修补
Java SE 6 Update 21
2010-07-07
没有安全性漏洞修复；Hotspot VM 17；支援 Red Hat Enterprise Linux 5.4和5.5、Oracle Enterprise Linux 4.8, 5.4, 5.5、Google Chrome 4与客制读取进度指示器（Customized Loading Progress Indicators）；VisualVM 1.2.2
Java SE 6 Update 22
2010-10-12
29个安全性漏洞修补; 支援RFC 5746
Java SE 6 Update 23
2010-12-08
没有安全性漏洞修复；Hotspot VM 19；对由右至左的语言有更好的支援
Java SE 6 Update 24
2011-02-15
21个安全性漏洞修补；更新 Java DB
Java SE 6 Update 25
2011-03-21
没有安全性漏洞修复；Hotspot VM 20；支援 Internet Explorer 9、Firefox 4和Chrome 10；改善BigDecimal；包含「分层」编译在伺服器虚拟机以启用它来跟客户端需拟机一样的快速开启，当达到更好的尖峰表现性能（这个功能要启用-server和-XX:+TieredCompilation指令选项）
Java SE 6 Update 26
2011-06-07
17新的安全性漏洞修补； 最新的版本能够和Windows Vista SP1相容
Java SE 6 Update 27
2011-08-16
没有安全性漏洞修复；给Firefox 5的新凭证
Java SE 6 Update 29
2011-10-18
20个安全性漏洞修补；其它许多种漏洞的修补
Java SE 6 Update 30
2011-12-12
没有安全性漏洞修复；修补SSL回归在Update 29；支援Red Hat Enterprise Linux 6
Java SE 6 Update 31
2012-02-14
14个安全性漏洞修补和一个漏洞修复；最新的版本能够够可靠的在Windows 2000上工作
JAVA SE 6 Update 32
2012-04-26
没有安全性漏洞修复；其它许多种漏洞的修补
Java SE 6 Update 33
2012-06-12
14个安全性漏洞修补, 改善VM设定档的读取
Java SE 6 Update 34
2012-08-14
没有安全性漏洞修复；其它许多种漏洞的修补
Java SE 6 Update 35
2012-08-30
包含一个深度的安全修补
Java SE 6 Update 37
2012-10-16
30个安全性漏洞修补
Java SE 6 Update 38
2012-12-11
其它许多种漏洞的修补
Java SE 6 Update 39
2013-02-01
50个安全性漏洞修补
Java SE 6 Update 41
2013-02-19
5个安全性漏洞修补
Java SE 6 Update 43
2013-03-04
2个安全性漏洞修补
Java SE 6 Update 45
2013-04-16
42个安全性漏洞修补；其它的一些改变； 最后的公开更新。自2016年1月起，Java 6（或更早的版本）没办法再从Oracle下载
Java SE 6 Update 51
2013-06-18
不公开，只能透过Java SE支援计划和在Apple Update for OS X Snow Leopard、Lion 和 Mountain Lion 中；最多达到40个安全性漏洞修复
Java SE 6 Update 65
2013-10-15
不公开，只能透过Java SE支援计划和在Apple Update for OS X Snow Leopard、Lion 和 Mountain Lion 中；最少11个重要的安全性漏洞修复
Java SE 6 Update 71
2014-01-14
不公开下载；33个漏洞修复
Java SE 6 Update 75
2014-04-15
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster no. #54 提供；25个安全性漏洞修复
Java SE 6 Update 81
2014-07-15
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；11个安全性漏洞修复
Java SE 6 Update 85
2014-10-16
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；18个安全性漏洞修复
Java SE 6 Update 91
2015-01-21
Linux x64和Windows i586的版本可在Java SE 6参考实作中使用。其他版本只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；15个安全性漏洞修复
Java SE 6 Update 95
2015-04-14
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；14个安全性漏洞修复
Java SE 6 Update 101
2015-07-15
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；18个安全性漏洞修复。 给IE 10和11的凭证在1.6.0_101版本中被引入
Java SE 6 Update 105
2015-10-20
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；17个安全性漏洞修复
Java SE 6 Update 111
2016-01-20
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；17个安全性漏洞修复
Java SE 6 Update 113
2016-02-05
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；1个安全性漏洞修复
Java SE 6 Update 115
2016-04-21
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；8个安全性漏洞修复
Java SE 6 Update 121
2016-07-19
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；15个安全性漏洞修复
Java SE 6 Update 131
2016-10-18
不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；12个安全性漏洞修复

**Java SE 7**
JAVA 7 （代号Dolphin） 是一个重大的更新，在 2011年7月7日亮相，并在2011年7月28日开放给开发者使用。发展时期被分类成十三个重要阶段，最后一个阶段在2011年6月6日完成。平均来看，每个里程碑各有8个版本（就是一般包括的功能增强和漏洞修复） 。在  OpenJDK 7 专案中的功能清单date=20120211102104 中列出了很多的改变。
在 Java 7 中新增的功能包括：
*JVM本身对动态语言的支持：新的invokedynamic字节码指令（ JSR-292date=20201220200733 ），与多语言虚拟机（Multi Language Virtual Machine）原型- 64位指针压缩（Java 6 中可以使用 XX:+UseCompressedOops 开启）- 一些语言方面的小改变（在Coin专案下的一个小群体）：- 在switch中使用字符串类型- try语句中的自动资源管理- 针对泛型实例的创建而改善的类型推论，被称为钻石操作符- 简化了varargs方法的声明- 二进位整数字面值- 允许在数值字面值中加入下划线- 允许在一个 catch 中捕捉多个类型的异常，并使用改进的类型检查重新抛出异常- JSR 166下的并发实用工具- 新的档案I/O 程式库 (JSR 203 定义) 增加多重档案的支援、档案原始资料和符号链接。新的包为：java.nio.file、java.nio.file.attribute和java.nio.file.spi- 使用 Timsort 来为集合与数组排序，取代归并排序- 对椭圆曲线加密演算法增加标准库级别的支援- 一个给Java 2D的XRender传递途径，改进了现代GPUs特有的功能的处理- 用于图形功能的新平台API（最初在版本6u10中的实作为不支援的API）- 增强了对新网路通讯协定（包括SCTP和Sockets Direct Protocol）的标准库级别的支持- 更新对XML和Unicode的支持，以符合最新标准- Java部署规则集
Lambda（Java 对匿名函数的实作）、Jigsaw（Java 对模块化的实作），以及其它一些 Coin 项目中的内容在 Java 7 里被放弃，而转为Java 8一部份（其中 Jigsaw 直至 Java 9 才得到实现）。
从2012年4月开始，Java 7 一直是java.com的预设下载版本，直到 Java 8 发布。

**Java 7 更新**
Oracle 在每季度发布 Java 7 家族每季的公开更新，至2015年4月产品支援生命周期结束时停止。

**Java SE 8**
Java 8 于2014年3月18日释出，包含了一些原本被计划在 Java 7却延迟的功能。
这些功能改进在JDK Enhancement Proposals (JEPs)的指导下得到了整合。- JSR 335，JEP 126：Lambda专案中提供的语言级匿名函数支持（官方称为 lambda 表达式，非官方亦称闭包）；添加预设方法（虚拟扩充元件方法），以允许在不破坏兼容性的情况下向现有接口中新增方法。Java社群中曾经有过针对是否要加入 lambda 表达式支援的辩论。稍后Sun公司宣布 lambda 表达式将会包含在Java中，并请社群协助改善该特性。支援lambda表达式使得针对流中元素的函数式操作成为可能，由此可以实现由 MapReduce 启发的函数式集合操作。预设方法允许API作者添加新的方法到现有介面上，而不会破坏旧的程式码中。预设方法还使得多重继承的行为 （不是状态）成为可能，但默认方法的设计意图并非在此。- JSR 223，JEP 174：Nashorn专案，一个 JavaScript 运行时，它允许开发人员在应用程式中嵌入 JavaScript 程式码- JSR 308，JEP 104：在 Java 型别上的注解- 无符号整数算术- JSR 337，JEP 120：重复注解- JSR 310，JEP 150：日期和时间 API，基于Joda-Time日期时间处理库的实现。- JEP 178：静态连结 JNI 程式库- JEP 153：执行 JavaFX 应用程式（直接执行 JavaFX 的应用程式的 JAR 包）- JEP 122：移除了虚拟机内存管理中的永久世代
Java 8 不再支援Windows XP，但JDK 8 第 25 版更新仍然可以在 Windows XP安装和运行。先前JDK 8的更新版本可以在XP中运行，但必须通过强制解压安装程序来进行安装。
2014年10月后，Java 8 成为官方网站上预设的下载版本。

**Java 8 更新**

**Java SE 9**
在2011年的JavaOne中，Oracle讨论了一些他们希望在2016年于Java 9中发布的功能。Java 9 应当对千兆级堆拥有更好的支持，同时能够更好地集成本机代码，且拥有新的垃圾收集器G1和能够自我调节的JVM。2016年初，Java 9 的发布被重新定为2017年3月；2017年3月时，发布日期又被拖延至2017年7月；后来又因Java执行委员会对Jigsaw项目实现的分歧而最终定为2017年9月21日，在此期间Oracle回应了部分疑问，并对一些重要的技术问题进行了修正。在2017年6月的最后几天，JCP对拟议的模块系统方案达成了共识。- JSR 376：在Jigsaw专案中将JDK模组化（参见Java平台模块系统条目）- JEP 222：jshell：Java Shell（一个 Java 交互式顶层构件）- JEP 295：AOT编译（通过 Graal VM 实现）- JEP 268：XML Catalogs
*JEP 266：更多的并发更新。包含响应式流的Java实现，及其部分替代品java.util.concurrent.Flow。
*JEP 193：变量句柄：定义一个标准方法来调用java.util.concurrent.atomic和sun.misc.Unsafe操作的等价物。
*JEP 282：jlink：Java链接器。该工具可以为模块生成一个包含了其所有依赖项的自定义运行时映像，同时允许生成一个包括运行它的JVM的可执行文件，。
*JavaDB被移出JDK
*JEP 263：高DPI图像：自动缩放与尺寸自适应。
Java 9 的首个发布候选版于2017年8月9日发布，首个稳定版于2017年9月21日发布。

**Java 9 更新**

**Java SE 10**
OpenJDK 10 于2018年3月20日发布。此次更新包含以下12个新特性：- JEP 286：局部变量类型推断- JEP 296：将所有JDK分支整合到同一个版本库中- JEP 310：应用程序类级别数据共享- JEP 304：垃圾回收器接口- JEP 307：适用于G1的多线程完全垃圾回收- JEP 312：线程本地握手- JEP 313：删除本地代码头文件生成器javah- JEP 314：更多的Unicode语言标签扩展- JEP 316：在可选的内存设备上申请堆内存空间- JEP 317：实验性的基于Java的JIT编译器。这是 Linux x64 下 Graal 动态编译器的集成。- JEP 319：内置根证书- JEP 322：基于时间的版本命名
第一个 JEP，JEP 286 局部变量类型推断，允许使用 var 关键字，使编译器推断出局部变量的实际类型。
所以我们可以这样做：
var list = new ArrayList(); // 推断为 ArrayList
var stream = list.stream();         // 推断为 Stream

**Java 10 更新**

**Java SE 11**
JDK 11 于2018年9月25日发布。Java 11 包含如下更新：- JEP 181：针对嵌套成员的访问控制- JEP 309：动态类文件常量- JEP 315：利用 Aarch64 的特有架构改进其上的性能- JEP 318：Epsilon：无操作垃圾收集器- JEP 320：移除 Java EE 和 CORBA 模块- JEP 321：HTTP Client- JEP 323：lambda参数的局部变量语法- JEP 324：支持 Curve25519 和 Curve 448 密钥- JEP 327：Unicode 10- JEP 328：添加Java飞行记录器（JFR），其用于创建性能分析记录- JEP 329：ChaCha20 和 Poly1305 加密算法- JEP 330：运行单文件源码程序- JEP 331：低开销堆分析- JEP 332：支持 TLS 1.3- JEP 333：添加ZGC（一个可扩展的低延迟垃圾收集器）- JEP 335：弃用 Nashorn JavaScript 引擎- JEP 336：弃用 Pack200 相关的工具及 API

**Java 11 更新**

**Java SE 12**
JDK 12 于2019年3月19日发布。该版本包含较多新特性，例如：- JEP 189：Shenandoah：一个实验性的低延迟垃圾收集器- JEP 230：细粒度性能评审套件- JEP 325：Switch 表达式（预览阶段）- JEP 334：JVM Constants API- JEP 340：仅保留一个 AArch64 平台的移植- JEP 341：默认类数据共享归档- JEP 344：针对G1，提供可中止的混合垃圾收集- JEP 346：针对G1，及时释放已申请但未使用的内存
预览功能 JEP 325 扩充了 switch 语句，使它可以用作表达式，并添加了一种新形式的 case 标签，其中右侧是表达式。
不需要break语句。 对于复杂的表达式，可以使用yield语句。 这在 Java SE 14 中成为了标准。
int ndays = switch(month) {
case JAN, MAR, MAY, JUL, AUG, OCT, DEC -> 31;
case APR, JUN, SEP, NOV -> 30;
case FEB -> {
if (year % 400 == 0) yield 29;
else if (year % 100 == 0) yield 28;
else if (year % 4 == 0) yield 29;
else yield 28; }
};

**Java 12 更新**

**Java SE 13**
JDK 13 于2019年9月17日发布。该版本包含以下新特性以及很多的强化和很多的漏洞修补。- JEP-350: 动态 CDS 归档- JEP-351: ZGC: 取消提交未使用记忆体- JEP-353: 重新实现旧版 Socket API- JEP-354: Switch 表达式（预览阶段）- JEP-355: 文字方块（预览阶段）
JEP 355 文字方块 允许多行字串文字：
String html = """


Hello, world


""";

**Java 13 更新**

**Java SE 14**
JDK 14 发布于 2020 年 3 月 17 日。Java 14 包含了下方列出的新功能，以及“数百个小改进和数千个漏洞修复”。- JEP-305：使用 instanceof 的模式匹配（预览）- JEP-343：打包工具（孵化中）- JEP-345：在 G1 中，对不均匀的内存访问（NUMA）情况下的内存申请优化- JEP-349：JFR Event Streaming- JEP-352：使字节缓冲区能够映射到非易失性存储器上- JEP-358：有帮助的 NullPointerExceptions- JEP-359：记录类（预览）- JEP-361：Switch 表达式（标准）- JEP-362：弃用 Solaris 和 SPARC 平台上的移植版本- JEP-363：移除 Concurrent Mark Sweep (CMS) 垃圾收集器- JEP-364：适用于 macOS 的 ZGC- JEP-365：适用于 Windows 的 ZGC- JEP-366：弃用 ParallelScavenge + SerialOld 的垃圾收集器组合- JEP-367：移除 Pack200 相关的工具及 API- JEP-368：文本块（第二预览版本）- JEP-370：外部内存访问 API（孵化中）
JEP 305, 使用 instanceof 的模式匹配 简化了instanceof测试的常见情况，紧接着进行强制转换。将
if (obj instanceof String) {
String s = (String) obj;
System.out.println( s.length() );
}
取代为
if (obj instanceof String s) {
System.out.println( s.length() );
}
JEP 359 记录类 允许轻松创建简单的不可变多元组类。

**Java 14 更新**

**Java SE 15**
JDK 15 发布于 2020 年 9 月 15 日。Java 15 增加了对多行字符串字面量（亦称文本块）的支持，此外 Shenandoah 和 ZGC 垃圾收集器也转为生产级别，不再标记为测试中。该版本移除了对 Solaris 操作系统及 SPARC CPU 的支持，还移除了 Nashron JavaScript 引擎，以及一些根 CA 证书。- JEP 339：爱德华曲线数字签名算法 (EdDSA)- JEP 360：密封类（预览）- JEP 371：隐藏类- JEP 372：移除 Nashorn JavaScript 引擎- JEP 373：重新实现 DatagramSocket API- JEP 374：禁用并弃用偏向锁- JEP 375：使用 instanceof 的模式匹配（第二预览版本）- JEP 377：ZGC: 可伸缩的低延迟垃圾收集器- JEP 378：文本块- JEP 379：Shenandoah: 低暂停时间的垃圾收集器- JEP 381：移除 Solaris 和 SPARC 平台上的移植版本- JEP 383：外部内存访问 API（第二孵化版本）- JEP 384：记录类（第二预览）- JEP 385：弃用 RMI Activation 以待后续移除

**Java 15 更新**

**Java SE 16**
JDK 16 发布于 2021 年 3 月 16 日。Java 16 移除了 AOT 编译及 Graal JIT 的选项。自 Java 16 开始，允许使用 C++14 来编写 Java 的实现（但仍不允许 C++17、C++20 等版本），且代码迁移到了 GitHub，不再使用 Mercurial 版本控制系统。- JEP 338：Vector API（孵化）- JEP 347：启用 C++14 语言特性- JEP 357：从 Mercurial 迁移到 Git- JEP 369：迁移到 GitHub- JEP 376：ZGC: 并发的线程栈处理- JEP 380：用于 Unix 域套接字的 Channel- JEP 386：Alpine Linux 的移植版本- JEP 387：可伸缩的 Metaspace- JEP 388：Windows/AArch64 的移植版本- JEP 389：外部链接器 API（孵化）- JEP 390：对值类型的类（Value-based Classes）发出警告- JEP 392：打包工具- JEP 393：外部内存访问 API（第三孵化版本）- JEP 394：使用 instanceof 的模式匹配- JEP 395：记录类- JEP 396：在缺省情况下对 JDK 内部进行强封装- JEP 397：密封类（第二预览版本）

**Java 16 更新**

**Java SE 17**
JDK 17 发布于2021年9月14日。Java 17是切换到新的6个月发布周期以来的第二个长期支持（LTS）版本（第一个是Java 11）。- JEP 306：将浮点数的默认语义恢复为严格的- JEP 356：加强的伪随机数生成器- JEP 382：新的 macOS 渲染管线- JEP 391：macOS/AArch64 的移植版本- JEP 398：弃用 Applet API 以待后续移除- JEP 403：对 JDK 内部进行强封装- JEP 406：使用 switch 的模式匹配（预览）- JEP 407：移除 RMI Activation- JEP 409：密封类- JEP 410：移除实验性的 AOT 与 JIT 编译器- JEP 411：弃用安全管理器以待后续移除- JEP 412：外部函数与内存 API（预览）- JEP 414：Vector API（第二孵化版本）- JEP 415：限定上下文的反序列化过滤器
JEP 406 将 instanceof 操作中使用的模式匹配语法扩展到 switch 语句和表达式。它允许根据参数类型、null case和精简模式来选择case
String toString(Object o) {
return switch (o) {
case null       -> "Null";
case String s   -> String.format("字串 %s", s);
case Long l     -> String.format("长整数 %d", l);
case Double d   -> String.format("浮点数 %f", d);
case Integer i && i > 0                            // 精简模式
-> String.format("正整数 %d", i);
case Integer i && i == 0 
-> "零整数 0";
case Integer i && i  String.format("负整数 %d", i);
default         -> o.toString();
};
}

**Java 17 更新**

**Java SE 18**
JDK 18 发布于 2022 年 3 月 22 日。- JEP 400：默认使用 UTF-8- JEP 408：简易 Web 服务器- JEP 413：Java API 文档中的代码片段- JEP 416：使用 Method Handle 重新实现核心反射- JEP 417：Vector API（第三孵化版本）- JEP 418：因特网地址解析 SPI- JEP 419：外部函数与内存 API（第二预览版本）- JEP 420：使用 switch 的模式匹配（第二预览版本）- JEP 421：弃用 Finalization 以待后续移除

**Java 18 更新**

**Java SE 19**
JDK 19 发布于 2022 年 9 月 20 日。- JEP 405：记录类的模式（预览）- JEP 422：Linux/RISC-V 的移植版本- JEP 424：外部函数与内存 API（预览）- JEP 425：虚拟线程（预览）- JEP 426：Vector API（第四孵化版本）- JEP 427：使用 switch 的模式匹配（第三预览版本）- JEP 428：结构化并发（孵化）
JEP 405 允许记录类的模式，扩充 instanceof 运算子和 switch 表达式的模式匹配功能，以包含显式引用记录组件的记录类模式。
record Rectangle(int x, int y, int w, int h) {}
int area(Object o) {
if (o instanceof Rectangle(int x, int y, int w, int h)) {
return w * h;
}
return 0;
}
此类模式可以包括巢状模式，其中记录类的组件本身就是记录类，从而允许模式匹配更多物件图。

**Java 19 更新**

**Java SE 20**
JDK 20 发布于 2023 年 3 月 21 日。- JEP 429：作用域值（孵化）- JEP 432：记录类的模式（第二预览版本）- JEP 433：使用 switch 的模式匹配（第四预览版本）- JEP 434：外部函数与内存 API（第二预览版本）- JEP 436：虚拟线程（第二预览版本）- JEP 437：结构化并发（第二孵化版本）- JEP 438：Vector API（第五孵化版本）

**Java 20 更新**

**Java SE 21**
JDK 21 在 2023 年 9 月 19 日发布。与仅预览和孵化 JEP 的 Java 20 相比，Java 21 有 8 个 JEP 不是处于预览或孵化状态。Java 21 正式引入了在 Java 17 和 Java 19 中首次预览的功能（使用 switch 的模式匹配，和记录类的模式）。 x86 上的 32 位 Windows 版本已弃用并删除。- JEP 430：字串范本（预览）- JEP 431：有序的 Collections- JEP 439：世代 ZGC- JEP 440：记录类的模式- JEP 441：使用 switch 的模式匹配- JEP 442：外部函数与记忆体 API（第三预览版本）- JEP 443：未命名模式和变数（预览）- JEP 444：虚拟执行绪- JEP 445：未命名的类别和实例 main 方法（预览）- JEP 446：作用域值（预览）- JEP 448：Vector API（第六孵化版本）- JEP 449：弃用 Windows 32 位 x86 端口以待后续移除- JEP 451：准备禁止动态加载代理- JEP 452：密钥封装机制 API- JEP 453：结构化并发（预览）
JEP 445 允许main方法位于未命名的类中：
void main() {
System.out.println("Hello, World!");
}
而不用：
public class HelloWorld { 
public static void main(String args) { 
System.out.println("Hello, World!");
}
}

**Java 21 更新**

**Java SE 22**
JDK 22 在 2024 年 3 月 19 日发布。- JEP 423：Region Pinning for G1- JEP 447：在super()前的语句（预览）- JEP 454：外部函数和记忆体API- JEP 456：未命名模式和变数- JEP 457：类别档案API- JEP 458：启动多个原始码档案程式- JEP 459：字串范本（第二预览版本）- JEP 460：Vector API（第七孵化版本）- JEP 461：Stream Gatherers（预览）- JEP 462：结构化并发（第二预览版本）- JEP 463：未命名的类别和实例 main 方法（第二预览版本）- JEP 464：作用域值（第二预览版本）
至少有一个 API 已从 Java 中删除；即从 Java 22 中删除了一个很少使用的 API（用于执行绪）。

**Java SE 23**
Java 23 在 2024 年 9 月 17 日发布。

**Java SE 24**
Java 24 在 2025 年 3 月 18 日发布。

**实作**
OpenJDK 是一个自由及开放原始码软体实作在Java Platform, Standard Edition (Java SE)。
在OpenJDK之前，许多各式各样不同的公司和组织推出好几个免费的Java实作。其中一个例子是Apache Harmony。 IBM也有提供Java实作，而RedHat则是通过IcedTea专案提供它：一个用于OpenJDK的架构和整合专案。

**参考文献**

**外部连结**
  官方 Java SE 下载date=20200212100943 -  Java早期版本date=20190908124430 -  Full list of changes for J2SE 1.3-  Full list of changes for J2SE 1.4-  Full list of changes for J2SE 5.0date=20111122172658 -  Java SE 7 release notesdate=20200514224546 -  Sun Java Supported versions and EOLdate=20111114222648 -  下载Java旧版本的封存档date=20200205030434