Java_2

Java 語言自 JDK1.0 版本以來經歷了許多次更新，也在基本程式庫中增加了大量的類別和套件。從 J2SE 1.4 開始，Java 語言的變動由 Java Community Process（JCP）管理，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, JAAS)
  * 內建了 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` 迴圈的語法被用特別的語法擴充了，適用於陣列或 `Iterable`，用於迭代每個成員，如基本的 `Collection` 類別 (規範在 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 語言中，一個新的版本控制系統，而舊版本控制系統仍然可以在開發者資源庫中繼續使用。

> Both version numbers "1.5.0" and "5.0" are used to identify this release of the Java 2 Platform Standard Edition. Version "5.0" is the product version, while "1.5.0" is the developer version. The number "5.0" is used to better reflect the level of maturity, stability, scalability and security of the J2SE.
> 
> 

這種對應關係持續維持到以後的版本 (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 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 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 開啟）
* 一些語言方面的小改變（在 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 317：實驗性的基於 Java 的 JIT 編譯器。這是 Linux x64 下 Graal 動態編譯器的整合。
* JEP 310：應用程式類級別資料共享
* JEP 322：基於時間的版本命名
* JEP 307：適用於 G1 的多執行緒完全垃圾回收
* JEP 304：垃圾回收器介面
* JEP 314：更多的 Unicode 語言標籤擴充
* JEP 319：內建根憑證
* JEP 312：執行緒本地握手
* JEP 316：在可選的記憶體裝置上申請堆記憶體空間
* JEP 313：刪除本地代碼標頭檔生成器 javah
* JEP 296：將所有 JDK 分支整合到同一個版本庫中

### 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，及時釋放已申請但未使用的記憶體

### 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: 文字方塊（預覽階段）

### 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（孵化中）

### 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 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 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：限定上下文的反序列化過濾器

## Java 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 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：結構化並行（孵化）

## Java 20

JDK 20 發布於 2023 年 3 月 21 日。

* JEP 429：作用域值（孵化）
* JEP 432：記錄類的模式（第二預覽版本）
* JEP 433：使用 switch 的模式匹配（第四預覽版本）
* JEP 434：外部函式與記憶體 API（第二預覽版本）
* JEP 436：虛擬執行緒（第二預覽版本）
* JEP 437：結構化並行（第二孵化版本）

## 實作

OpenJDK 是一個自由開放源始碼軟體實作在 Java Platform, Standard Edition (Java SE)。

在 OpenJDK 之前，許多各式各樣不同的公司和組織推出好幾個免費的 Java 實作。其中一個例子是 Apache Harmony。 IBM 也有提供 Java 實作，而 RedHat 則是通過 IcedTea 專案提供它：一個用於 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 舊版本的封存檔（頁面存檔備份，存於網際網路檔案館）