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