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舊版本的封存檔