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 901进行规范化管理。

除了语言上的变化，多年来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 59，是第一个在JCP下开发的Java平台。主要的变化包括︰

- 语言上的改变
- `assert`关键字(在 JSR 41中被指定)
- 程式库的改善
- 仿照Perl的正规表示式
- 异常链，允许一个异常来封装原先处于较低级别的异常
- 支援Internet Protocol version 6 (IPv6)
- 非阻塞I/O（取名为Nonblocking Input/Output，NIO）（在 JSR 51中被指定）
- 日志API (在 JSR 47中被指定)
- 图像I/O API来读取和写入图片，支持JPEG、PNG等格式
- 整合了XML解析器和XSLT处理器（JAXP）（指定在 JSR 5和 JSR 63）
- 整合安全和加密扩充元件(JCE, JSSE, )
- 内置了Java Web Start（Java Web Start在2001年3月第一次被释出，作为J2SE 1.3的可选组件）（指定在 JSR 56）
- 偏好设定 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`循环的语法被用特别的语法扩充了，适用于阵列或java/lang，用于迭代每个成员，如基本的java/util类别（规范在JSR 201）
- 改进多执行绪Java程式的执行语义；新的Java内存模型改善了复杂性、有效性和以前的规格性能
- 静态导入

另外也有以下这些对于基本程式库的改善：

- 自动给RMI产生桩模块
- Swing：新的界面外观，叫做synth
- 异步实用工具 在 java.util.concurrent 套件中
- 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 5｜2004-10-4｜Metadata、泛型型别、对基础型别自动封装和自动解封装、加强for循环、枚举的类型、静态类别汇入，格式化I/O、varargs和并发的实用工具。改进的启动时间和内存占用量。在多个正在运行的JVM之间共用的只读资料。远端监控和管理。一个新的JVM配置API。程序化的堆叠版本追踪。支持对XML 1.1的命名空间、XML架构、SAX 2.0.2，DOM级别3，与XSLT 1.1快速的XLSTC的编译器。Unicode 4.0支援。

Java SE 5 Update 1｜2004-12-25｜50个漏洞修复

Java SE 5 Update 2｜2005-03-16｜一些中断的修复。程式现在以较客制化的方式编译。日历漏洞修复和其它漏洞修复。

Java SE 5 Update 3｜2005-05-03｜这个版本修复了一些漏洞，包含在Linux Mozilla外挂的中断。

Java SE 5 Update 4｜2005-07-04｜在这个版本中，J2SE对于64位元Windows的支持从候选版本中脱颖而出。这个版本在AMD64/EM64T 64位元模式运行用Windows Server 2003 x64 版本的机器。

Java SE 5 Update 5｜2005-09-18｜修复了一些漏洞以及表现增强。对Windows 95和Windows NT 4.0最后的更新。

Java SE 5 Update 6｜2005-12-07｜在这个版本之前，Java小程式或应用程序可以决定想要运行的JRE版本，但从这个更新之后就不再是这样了。所有的程式都用最新版本的JRE运行。

Java SE 5 Update 7｜2006-05-29｜修复了几个漏洞并提高性能。

Java SE 5 Update 8｜2006-08-13｜修复了一些漏洞以及提高了性能。

Java SE 5 Update 9｜2006-11-12｜这个版本修复了一些小回归。

Java SE 5 Update 10｜2006-12-22｜添加了由Linux 2.6支持的epoll I/O事件通知工具的实作。许多漏洞被修复。

Java SE 5 Update 11｜2007-03-08｜修复了几个漏洞并提高了性能。

Java SE 5 Update 12｜2007-06-11

Java SE 5 Update 13｜2007-10-05｜Java Web Start中与本地文件存取相关的多个安全漏洞已修复。修复了允许绕过网络进入限制的JRE中的安全漏洞。修复其他几个安全问题和小错误。

Java SE 5 Update 14

Java SE 5 Update 15｜2008-03-06｜修复因缓冲堆超出边界而导致的几个崩溃漏洞以及其他一些小漏洞。现在来自AOL，DigiCert和TrustCenter的新的根证书已经被包含在内。

Java SE 5 Update 16｜2008-07-23｜此版本修复了几个安全漏洞，例如DoS漏洞，缓冲区溢出和其他可能导致崩溃的漏洞，或是会给程式存取某些系统资源。这些漏洞位于Java Web Start，Java管理扩充元件（Java Management Extensions，JMX）管理代理以及用于处理XML资料的函数中。

Java SE 5 Update 17｜2008-12-03｜更新了UTF-8字符集，实作以处理非最短形式的UTF-8字节序列，从而引入了与以前版本不相容的问题。添加了新的根凭证。许多漏洞被修复。

Java SE 5 Update 18｜2009-03-25｜几个安全上的问题已解决。稍微修改了在LDAP目录中存取Java物件的行为的JNDI功能。增加了五个新的根凭证。许多漏洞被修复。

Java SE 5 Update 19｜2009-05-29｜为多个系统配置增加支援。增加了服务标签（Service Tag）支持。许多漏洞被修复，包括几个崩溃和内存泄漏。

Java SE 5 Update 20｜2009-08-06｜解决了几个安全漏洞，例如不受信任的小程式的潜在系统访问，以及图像处理和Unpack200中的整数溢出。添加了几个新的根凭证。许多其它小漏洞已修复。

Java SE 5 Update 21｜2009-09-09｜许多小漏洞被修复。

Java SE 5 Update 22｜2009-11-04｜此版本标记Java 5的End Of Service Life（EOSL），并且是其最终的公开版本。在报告Sun Alerts 269868、270474、270475和270476中的几个安全漏洞已修复。其他几个漏洞已修复。此外，还增加了两个新的根凭证。

## Java SE 6

代号为Mustang。版本发布于2006年12月11日，Sun把原本的名称“J2SE”改为“Java SE”，然后再从版本号中去掉“.0”，而开发者内部编号仍然是1.6.0。这个版本是根据 JSR 270开发的。

在发展阶段，新版本大约每一周都会释出一些功能增强和漏洞的修复。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改善：同步和编译器性能优化，新算法和对现有垃圾收集算法的升级以及应用程序启动性能。

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 SE 6｜2006-12-23｜此版本在Web服务、脚本和数据库，可插入的注解、安全性以及质量、相容性和稳定性等领域增强了许多功能。现在也正式支援JConsole。已增加对Java DB的支援。

Java SE 6 Update 1｜2007-05-07

Java SE 6 Update 2｜2007-07-03

Java SE 6 Update 3｜2007-10-03

Java SE 6 Update 4｜2008-01-14｜HotSpot VM 10

Java SE 6 Update 5｜2008-03-05｜消除了几个安全漏洞。现在包括了来自AOL、DigiCert和TrustCenter的新的根凭证。

Java SE 6 Update 6｜2008-04-16｜引入了对臭名昭彰的Xlib / XCB锁定断言问题的解决方法。当以LoginContext使用Kerberos认证时内存泄漏的问题已被修复。其它几个漏洞已修复。

Java SE 6 Update 7｜非正式记载的，Java SE 6 Update 7（1.6.0.7）显示为在Win9x系列操作系统上工作的Java的最后一个版本

Java SE 6 Update 10｜2008-10-15｜HotSpot VM 11. 此更新的主要更改包括：、Java部署工具包（Java Deployment Toolkit），为一组JavaScript函数，用于简化和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 专案中的功能清单中列出了很多的改变。

在 Java 7 中新增的功能包括：

- JVM本身对动态语言的支持：新的`invokedynamic`字节码指令（JSR-292），与多语言虚拟机（Multi Language Virtual Machine）原型
- 64位指针压缩（Java 6 中可以使用 XX:+UseCompressedOops 开启）
- 在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 7｜2011-07-28｜初始版本；HotSpot VM 21

Java SE 7 Update 1｜2011-10-18｜20个安全漏洞修补；其它漏洞修补

Java SE 7 Update 2｜2011-12-12｜没有安全漏洞修补；HotSpot VM 22；可靠性和性能改进；支援 Solaris 11 和 Firefox 5 之后的版本；JavaFX 包含 Java SE JDK, 改善了网页部属的应用程序。

Java SE 7 Update 3｜2012-02-14｜14个安全漏洞修补

Java SE 7 Update 4｜2012-04-26｜没有安全漏洞修补；HotSpot VM 23; JDK 支援 Mac OS X

Java SE 7 Update 5｜2012-06-12｜14个安全漏洞修补

Java SE 7 Update 6｜2012-08-14｜JavaFX 和Java Access Bridge 被包含在 Java SE JDK 和 JRE 安装里面, JavaFX 支援触控萤幕和触控板, JavaFX 支援 Linux, JDK 和 JRE 支援 Mac OS X, JDK 在 ARM 上支援 Linux

Java SE 7 Update 7｜2012-08-30｜4个安全漏洞修补

Java SE 7 Update 9｜2012-10-16｜30个安全漏洞修补

Java SE 7 Update 10｜2012-12-11｜新的安全性功能，像是禁用任何Java应用程序在浏览器中运行的能力，以及当JRE处于不安全状况时发出警告的新对话框，另外也有一些漏洞修复

Java SE 7 Update 11｜2013-01-13｜Olson Data 2012i；修复了在安装了JavaFX的独立版本的系统上插件注册问题, CVE-2013-0422 的安全修复；Java applet和Web启动应用程序的预设安全级别已从“中”增加到“高”

Java SE 7 Update 13｜2013-02-01｜50个安全漏洞修补

Java SE 7 Update 15｜2013-02-19｜5个安全漏洞修补

Java SE 7 Update 17｜2013-03-04｜2个安全漏洞修补

Java SE 7 Update 21｜2013-04-16｜许多的改变，包括 42 个安全漏洞修补, 新的不包含插件的服务器JRE , 以及以 ARM 架构运行的Linux上的JDK

Java SE 7 Update 25｜2013-06-18｜许多的改变，包括 40 个安全漏洞修补

Java SE 7 Update 40｜2013-09-10｜621个漏洞修补；新的安全性功能, hardfloat ARM, Java 任务控制（Java Mission Control） 5.2和Retina Display支援

Java SE 7 Update 45｜2013-10-15｜51个安全漏洞修补；防止Java应用程序在未经授权时的重新分发；恢复安全提示；JAXP变化；TimeZone.setDefault的更改

Java SE 7 Update 51｜2014-01-14｜36 个安全漏洞修补；封锁没有表明身份的JAVA小程式（如远程控制台－Java Applet－IBM IMM卡、HP iLO卡），即使警告对话框中有“将在下一版本中被封锁”， 17 个漏洞修补

Java SE 7 Update 55｜2014-04-15｜37个安全漏洞修补； 19个漏洞修补

Java SE 7 Update 60｜2014-05-28｜Java Mission Control 5.3，130个漏洞修补

Java SE 7 Update 65｜2014-07-15｜18个漏洞修补

Java SE 7 Update 67｜2014-08-04｜1个漏洞修补

Java SE 7 Update 71｜2014-10-14｜16个漏洞修补

Java SE 7 Update 72｜2014-10-14｜与Update 71相同的释出日期，作为Java SE 7的相对应补丁集更新（Patch Set Update，PSU）； 36 个漏洞修补

Java SE 7 Update 75｜2015-01-20｜12个漏洞修补； SSLv3预设为禁用

Java SE 7 Update 76｜2015-01-20｜与Update 75相同的释出日期，作为Java SE 7的相对应补丁集更新（Patch Set Update，PSU）； 97个漏洞修补

Java SE 7 Update 79｜2015-04-14｜21个安全漏洞修补；6个漏洞修补

Java SE 7 Update 80｜2015-04-14｜Java 7的最后一个公开版本；与Update 79相同的发布日期，作为Java SE 7的相对应补丁集更新（Patch Set Update，PSU）；104个漏洞修补

Java SE 7 Update 85｜2015-07-15｜不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；25个安全漏洞修补

Java SE 7 Update 91｜2015-10-20｜不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；20个安全漏洞修补

Java SE 7 Update 95｜2016-01-19｜不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；8个安全漏洞修补

Java SE 7 Update 97｜2016-02-05｜不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；1个安全漏洞修补

Java SE 7 Update 99｜2016-03-23｜不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；1个安全漏洞修补

Java SE 7 Update 101｜2016-04-18｜不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；9个安全漏洞修补

Java SE 7 Update 111｜2016-07-19｜不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；36个安全漏洞修补

Java SE 7 Update 121｜2016-10-18｜不公开，只能透过Java SE支援计划和Solaris 10的Recommended Patchset Cluster 提供；32个安全漏洞修补

## 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 8｜2014-03-18｜初始版本

Java SE 8 Update 5｜2014-04-15｜使用“、”在Caller-Allowable-Codebase 属性中; 11个漏洞的修补

Java SE 8 Update 11｜2014-07-15｜Java 依赖性分析工具（Java Dependency Analysis Tool）; Java 控制台选项以禁用赞助者; JAR 档案属性 – Entry-Point; JAXP 处理限制属性 – maxElementDepth; 18 个安全性漏洞修补, 15 个漏洞修补

Java SE 8 Update 20｜2014-08-19｜669 个漏洞修补， JMC 5.4, 字串重复数据删除（预设为不启用）

Java SE 8 Update 25｜2014-10-14｜10 个漏洞修补

Java SE 8 Update 31｜2015-01-19｜26 个漏洞修补; SSLv3预设为禁用

Java SE 8 Update 40｜2015-03-03｜645 个漏洞修补 加入“内存压力”的概念来协助指出有多少的系统内存还能够使用（低压 = 高内存, 高压 = 低内存）

Java SE 8 Update 45｜2015-04-14｜13 个漏洞修补

Java SE 8 Update 51｜2015-07-14｜增加对WIndows平台的原生沙盒的支援（预设为禁用）; 另外还有 25 个安全性修补,14 个漏洞修补

Java SE 8 Update 60｜2015-08-18｜480 个漏洞修补

Java SE 8 Update 65｜2015-10-20｜25 个安全性修补, 3 个漏洞修补

Java SE 8 Update 66｜2015-11-16｜15 个漏洞修补

Java SE 8 Update 71｜2016-01-19｜8 个安全性修补, 5 个漏洞修补

Java SE 8 Update 72｜2016-01-19｜8 个安全性修补, 5 个漏洞修补, 许多的增强

Java SE 8 Update 73｜2016-02-03｜1 个安全性修补

Java SE 8 Update 74｜2016-02-03｜1 个安全性修补

Java SE 8 Update 77｜2016-03-23｜1 个安全性修补

Java SE 8 Update 91｜2016-04-19｜9 个安全性修补, 4 个漏洞修补和增强

Java SE 8 Update 92｜2016-04-19｜来自8u91的安全性和漏洞修补, 再加上 76 个额外的漏洞消补; 推出ExitOnOutOfMemoryError 和CrashOnOutOfMemoryError 标签

Java SE 8 Update 101｜2016-07-19｜来自8u92的安全性和漏洞修补, 再加上 9个额外的漏洞消补

Java SE 8 Update 102｜2016-07-19｜来自8u101的安全性和漏洞修补, 再加上 118 个额外的漏洞消补

Java SE 8 Update 111｜2016-10-18｜安全性修补和 9 个漏洞修补

Java SE 8 Update 112｜2016-10-18｜新增功能和139个漏洞修补在8u111

## 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 9｜2017-09-21｜初始版本

Java SE 9.0.1｜2017-10-17｜安全性修补和严重漏洞修补

Java SE 9.0.4｜2018-01-16｜JDK 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 关键字，使编译器推断出局部变量的实际类型。

所以我们可以这样做：

```java
var list = new ArrayList<String>(); // 推斷為 ArrayList<String>
var stream = list.stream();         // 推斷為 Stream<String>
```

### Java 10 更新

版本｜发布日期｜亮点

Java SE 10｜2018-03-20｜初始版本

Java SE 10.0.1｜2018-04-17｜安全性修补和五个漏洞修补

Java SE 10.0.2｜2018-07-17｜JDK 10 的最终版本。安全性修补和七个漏洞修补

## Java SE 11（LTS）

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 11｜2018-09-25｜初始版本

Java SE 11.0.1｜2018-10-16｜安全性修补和漏洞修补

Java SE 11.0.2｜2019-01-15｜安全性修补和漏洞修补

Java SE 11.0.3｜2019-04-16｜新功能，安全性修补和漏洞修补

Java SE 11.0.4｜2019-07-16｜新功能，安全性修补和漏洞修补；HotSpot 现在可以正确地侦测 Windows Server 2019

Java SE 11.0.5｜2019-10-15｜新功能，安全性修补和漏洞修补

Java SE 11.0.6｜2020-01-14｜新功能，安全性修补和漏洞修补

Java SE 11.0.7｜2020-04-14｜新功能，安全性修补和漏洞修补

Java SE 11.0.8｜2020-07-14｜新功能，安全性修补和漏洞修补

Java SE 11.0.9｜2020-10-20｜新功能，安全性修补和漏洞修补

Java SE 11.0.10｜2021-01-19｜新功能，安全性修补和漏洞修补

Java SE 11.0.11｜2021-04-20｜新功能，安全性修补和漏洞修补

## 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 中成为了标准。

```java
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 12｜2019-03-19｜初始版本

Java SE 12.0.1｜2019-04-16｜日本新年号名称和安全性修补

Java SE 12.0.2｜2019-07-16｜移除功能和设定

## 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 文字方块 允许多行字串文字：

```java
String html = """
              <html lang="en">
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;
```

### Java 13 更新

版本｜释出日期｜重点

Java SE 13｜2019-09-17｜初始版本

Java SE 13.0.1｜2019-10-15｜安全性修补和漏洞修补

Java SE 13.0.2｜2020-01-14｜安全性修补和漏洞修补

## 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测试的常见情况，紧接着进行强制转换。将

```java
if (obj instanceof String) {
    String s = (String) obj;
    System.out.println( s.length() );
}
```

取代为

```java
if (obj instanceof String s) {
    System.out.println( s.length() );
}
```

JEP 359 记录类 允许轻松创建简单的不可变多元组类。

### Java 14 更新

版本｜释出日期｜重点

Java SE 14｜2020-03-17｜初始版本

Java SE 14.0.1｜2020-04-14｜安全性修补和漏洞修补

Java SE 14.0.2｜2020-07-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 15｜2020-09-15｜初始版本

Java SE 15.0.1｜2020-10-20｜安全性修补和漏洞修补

Java SE 15.0.2｜2021-01-19｜安全性修补和漏洞修补

## 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 16｜2021-03-16｜初始版本

Java SE 16.0.1｜2021-04-20｜时区数据库更新；安全性修补和漏洞修补

Java SE 16.0.2｜2021-07-20｜安全性修补和漏洞修补

## Java SE 17（LTS）

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

```java
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 < 0 
                            -> String.format("負整數 %d", i);
            default         -> o.toString();
        };
}
```

### Java 17 更新

版本｜释出日期｜重点

Java SE 17｜2021-09-14｜初始版本

Java SE 17.0.1+12｜2021-10-19｜移除了 IdenTrust Root Certificate；无法正确识别 Windows 11；透过 JDK 内建 JNDI LDAP 实现控制引用地址对象重建的系统属性；无法正确识别 Windows Server 2022安全性修补；21 个漏洞修补

Java SE 17.0.2+8｜2022-01-18｜移除 Google 的 GlobalSign Root Certificate；164 个漏洞修补

Java SE 17.0.3｜2022-04-19｜新的 XML 处理限制；Only Expose Certificates With Proper Trust Settings as Trusted Certificate Entries in macOS KeychainStore；Restricted Parsing of URL Strings in Built-in JNDI Providers；48 个漏洞修补

Java SE 17.0.4+11｜2022-07-19｜支援对 Java GSS/Kerberos 的 HTTPS 通道绑定；更新 java.net.InetAddress 以检测不明确的 IPv4 地址文字；遇到 IOException 时预设 JDK 压缩器将关闭；计算活动处理器计数时忽略 CPU 份额；60 个漏洞修补

Java SE 17.0.5+9｜2022-10-18｜停用 SHA-1 签章 JARs；使 HttpURLConnection 预设保持活动超时可配置；将时区资料更新至 2022c；77 个漏洞修补

## 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 18｜2022-03-22｜初始版本

Java SE 18.0.1｜2022-04-19｜安全性修补和漏洞修补

Java SE 18.0.1.1｜2022-05-06｜安全性修补和漏洞修补

Java SE 18.0.2｜2022-07-19｜安全性修补和漏洞修补

Java SE 18.0.2.1｜2022-08-18｜Fixes a regression in the C2 JIT compiler

## 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 表达式的模式匹配功能，以包含显式引用记录组件的记录类模式。

```java
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 19｜2022-09-20｜初始版本

Java SE 19.0.1｜2022-10-18｜安全性修补和漏洞修补

Java SE 19.0.2｜2023-01-17｜安全性修补和漏洞修补

## 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 20｜2023-03-21｜初始版本

Java SE 20.0.1｜2023-04-18｜漏洞修补

Java SE 20.0.1｜2023-04-18｜漏洞修补

## Java SE 21（LTS）

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方法位于未命名的类中：

```java
void main() {
    System.out.println("Hello, World!");
}
```

而不用：

```java
public class HelloWorld { 
    public static void main(String[] args) { 
        System.out.println("Hello, World!");
    }
}
```

### Java 21 更新

版本｜释出日期｜重点

Java SE 21｜2023-09-19｜初始版本

Java SE 21.0.1｜2023-10-17｜漏洞修正

Java SE 21.0.2｜2024-01-16｜漏洞修正

## 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：作用域值（第二预览版本）

与 Java 执行绪实作相关的 API`java.lang.Thread.countStackFrames`已被删除。

## Java SE 23

Java 23 在 2024 年 9 月 17 日发布，其 JEP 如下：

- JEP 455：模式中的原始类型、instanceof 和 switch（预览）
- JEP 466：类别档案 API（第二个预览版）
- JEP 467：Markdown 文件注释
- JEP 469：Vector API（第八个孵化器）
- JEP 473：串流收集器（第二预览版）
- JEP 471：弃用 sun.misc.Unsafe 中的内存存取方法并将其删除
- JEP 474：ZGC：预设的分代模式
- JEP 476：模组导入声明（预览）
- JEP 477：隐式宣告的类别和实例主要方法（第三次预览）
- JEP 480：结构化并发（第三次预览）
- JEP 481：作用域值（第三次预览）
- JEP 482：灵活的建构子主体（第二次预览）

由于功能设计方面的问题，字串模板预览功能在 Java 23 中被移除。

## Java SE 24

Java 24 规格于 2024 年 12 月最终确定，其中 24 个 JEP 被纳入该版本，并于 2025 年 3 月 18 日发布。

- JEP 404：分代 Shenandoah（实验性）
- JEP 450：紧凑物件头（实验性）（以前称为Lilliput 专案）
- JEP 472：准备限制 JNI 的使用
- JEP 475：G1 的后期屏障扩展
- JEP 478：金钥派生函数 API（预览版）
- JEP 479：删除 Windows 32 位元 x86 端口
- JEP 483：提前类别载入与连结
- JEP 484：类别档案 API
- JEP 485：流收集器
- JEP 486：永久停用安全管理器
- JEP 487：作用域值（第四个预览版）
- JEP 488：模式中的原始类型、instanceof 和 switch（第二个预览）
- JEP 489：Vector API（第九个孵化器）
- JEP 490：ZGC：删除非分代模式
- JEP 491：无需固定即可同步虚拟线程
- JEP 492：灵活的建构子主体（第三次预览）
- JEP 493：不使用 JMOD 连结执行时间映像
- JEP 494：模组导入声明（第二次预览）
- JEP 495：简单原始档案和实例主要方法（第四个预览版）
- JEP 496：基于抗量子模组格的金钥封装机制
- JEP 497：基于模组格的抗量子数位签章算法
- JEP 498：在 sun.misc.Unsafe 中使用内存存取方法时发出警告
- JEP 499：结构化并发（第四个预览版）
- JEP 501：弃用并删除 32 位元 x86 端口

## Java SE 25（LTS）

Java 25 在 2025 年 9 月 16 日发布，其 JEP 如下：

- JEP 470：密码物件 PEM 编码（预览）
- JEP 502：稳定值（预览）
- JEP 503：移除 32 位元 x86 埠
- JEP 505：结构化并发（第五次预览）
- JEP 506：作用域值
- JEP 507：模式中的原始类型、instanceof 和 switch（第三次预览）
- JEP 508：Vector API（第十孵化版本）
- JEP 509：JFR CPU-Time Profiling (Experimental)
- JEP 510：金钥衍生函式 API
- JEP 511：模组汇入宣告
- JEP 512：简单原始档案和实例主要方法
- JEP 513：灵活的建构子主体
- JEP 514：Ahead-of-Time Command-Line Ergonomics
- JEP 515：Ahead-of-Time Method Profiling
- JEP 518：JFR Cooperative Sampling
- JEP 519：缩减物件标头
- JEP 520：JFR 方法测量时间与追踪
- JEP 521：分代 Shenandoah

## 未来功能

- Valhalla 项目：值类，其物件缺乏身份，但在某些情况下可以获得改进的内存布局（较少的间接性），或完全优化其分配。
- 改进了与本机程式码的互通性，使Java原始程式码能够以比现在更简单且效能更好的方式呼叫其他语言的函数和使用其他语言的资料类型（Project Panama 的这一部分在Java 22中的JEP 454：外部函数和内存API下逐渐稳定）。
- Vector API，一个用于SIMD程式设计的可移植且相对低阶的抽象层。其稳定性依赖于Valhalla项目。
- Lilliput专案：减少Java物件头的大小。首先减少到64位，然后减少到32位。
- CRaC专案可以对整个JVM（以及正在运行的应用程序）进行快照，并透过必要的调整（重新开启档案、套接字等）进行还原。
- 除其他事项外，莱顿专案将允许部分或（长期）全部AOT编译，降低整体动态性（透过采用所谓的“封闭世界约束”）以减少动态编译开销。
- Babylon专案旨在透过增强Java语言的反射式程式设计能力（即程式码反射，即对程式码本身的反射），将Java语言的适用范围扩展到其他程式设计模型。其主要目标是在GPU上执行Java程式码，SQL和其他程式设计模型则作为次要目标。

## 实作

OpenJDK是一个自由及开放源代码软件实作在Java Platform, Standard Edition (Java SE)。

官方支援的Java平台是JavaSE，它最初由Sun开发，现在由Oracle管理。发行版基于OpenJDK项目，这是一个具有开放开发模型的免费开源专案。然而，也存在其他Java实作—部分原因是Java早期是专有软件。相反，一些实现是为了提供优于标准实现的优势而创建的，这些实现通常是某些学术或公司赞助的研究领域的成果。许多Linux发行版都包含透过Red Hat启动的IcedTea专案所建构的OpenJDK，它提供了更直接的建置和整合环境。

Visual J++和Microsoft Java 虚拟机器最初是作为不相容的实作而创建的。在Sun v. Microsoft案之后，Microsoft 放弃了它，并开始着手开发.NET平台。2021年，Microsoft开始发布与Java 11相容的“Microsoft Build of OpenJDK”，之后又陆续发布了与Java 17相容的版本。这些版本不仅支援Windows，还支援Linux和macOS。

还有其他专有Java实作可用，例如Azul的Zing。Azul在Zulu名称下提供经过认证的开源OpenJDK版本。

在OpenJDK发布之前，Sun的实作仍是专有的，而GNU Classpath专案则是为了提供Java平台的免费开源实作而创建的。自JDK 7发布以来，当OpenJDK成为官方参考实作时，GNU Classpath专案的最初动机几乎完全消失了，其最后一次发布是在2012年。

Apache Harmony专案在OpenJDK发布前不久启动。在Sun发布初始源代码后，Harmony专案继续运行，致力于提供基于宽松许可证（与OpenJDK选择的保护性许可证不同）的实作。谷歌后来开发了Android，并以宽松许可证发布。Android整合了Harmony专案的部分内容，并补充了Google自己的Dalvik虚拟机器和ART。Apache Harmony现已退役，Google已将其Harmony元件替换为OpenJDK中的等效元件。

Jikes和Jikes RVM都是IBM开发的开源研究专案。

还有一些其他实作最初是专有软件，但现在是开源的。IBM最初将OpenJ9开发为专有的J9，但后来重新授权了该专案并将其捐赠给了Eclipse基金会。JRockit是专有实现，被Oracle收购并纳入了后续的OpenJDK版本中。

## 外部链接

- 官方 Java SE 下载
- Java早期版本
- Full list of changes for J2SE 1.3
- Full list of changes for J2SE 1.4
- Full list of changes for J2SE 5.0
- Java SE 7 release notes
- Sun Java Supported versions and EOL
- 下载Java旧版本的封存档