Java 自 1995 年誕生以來,經歷了從 Oak 到現代模組化、函數式、雲原生平台的演進。本文梳理 **28 年 (1995-2023)** 關鍵版本里程碑、架構變革、語法革新與生態演變,助你建立完整歷史脈絡。
| 特性 | 語法範例 | 影響 |
| 泛型 | List list = new ArrayList<>(); | 類型安全、消除強制轉型、API 表達力飛躍 |
| 自動裝箱/拆箱 | Integer i = 10; int n = i; | 基本型別與包裝類無縫轉換 |
| 增強 for 迴圈 | for (String s : list) { ... } | 簡化集合/陣列遍歷 |
| 可變參數 | void print(String... args) | 替代陣列包裝 |
| 枚舉 | enum Season { SPRING, SUMMER } | 類型安全常數、支援方法/欄位 |
| 靜態導入 | import static java.lang.Math.*; | 簡化常用靜態方法調用 |
| 註解 | @Override, @Deprecated, @SuppressWarnings | 元資料編程基石,催生 Spring/Hibernate/JPA 生態 |
JVM 層:Java Memory Model (JMM) 修正、java.util.concurrent 並發包 (AQS、線程池、鎖、原子類)。
五、長期支援 (LTS) 時代開啟:JDK 6/7/8
| 版本 | 時間 | 代號 | 核心特性 | 狀態 |
| JDK 6 | 2006.12 | Mustang | 腳本引擎 (JSR-223)、編譯器 API、輕量 HTTP Server、大量 VM 優化 (鎖膨脹/消除、類載入、GC) | 2013 結束公共更新 |
| JDK 7 | 2011.07 | Dolphin | G1 GC (實驗→正式)、NIO.2 (Path/Files)、try-with-resources、菱形語法 <>、Switch on String、二進位字面值、動態語言支援 (invokedynamic) | 2015 結束公共更新 |
| JDK 8 | 2014.03 | Spider | Lambda 表達式、Stream API、函數式介面、Optional、新日期時間 API (java.time)、預設方法、Nashorn JS 引擎、Metaspace 取代 PermGen | LTS (至 2030+) |
JDK 8 里程碑意義
- **函數式編程進入主流**,徹底改變 Java 代碼風格 (集合操作、併發、回調)。
- **最長壽 LTS 版本**,至今仍佔生產環境 50%+ 份額。
- OpenJDK 成為參考實現,Oracle JDK 商業授權模式轉變 (2019 起)。
六、模組化與釋放節奏重塑:JDK 9-17
| 版本 | 時間 | 核心特性 | 關鍵意義 |
| JDK 9 | 2017.09 | 模組系統 (JPMS/Jigsaw)、JShell REPL、集合工廠方法 List.of()、Stream 增強、私有介面方法、HTTP/2 Client (孵化)、多版本 JAR | 強封裝、模組化依賴、啟動效能優化 |
| JDK 10 | 2018.03 | 局部變數型別推斷 var、GC 平行化 (G1)、應用程式類資料共享 (AppCDS)、根憑證開源 | 六個月釋放節奏確立、型別推斷減少樣板 |
| JDK 11 | 2018.09 | HTTP Client 標準化、String 方法增強、Lambda 參數 var、Nest-Based 存取控制、ZGC (實驗)、Epsilon GC、移除 Java EE/COBRA 模組 | LTS (至 2026+)、長期支援基石版本 |
| JDK 12 | 2019.03 | Switch 表達式 (預覽)、Shenandoah GC、Microbenchmark Suite、JVM Constants API | Switch 表達式奠基 |
| JDK 13 | 2019.09 | 文字區塊 (預覽)、Switch 表達式 (預覽二)、ZGC 釋放未用記憶體、Socket API 重寫 | 多行字串語法雛形 |
| JDK 14 | 2020.03 | Record (預覽)、模式匹配 instanceof (預覽)、Switch 表達式標準化、NVM 支援、JFR 事件串流 | 資料載體 Record 登場 |
| JDK 15 | 2020.09 | 密封類、文字區塊標準化、Record 二次預覽、ZGC 生產就緒、EdDSA 加密、隱藏類 | 領域建模工具鏈成熟 |
| JDK 16 | 2021.03 | Record 標準化、模式匹配 instanceof 標準化、Vector API (孵化)、外部記憶體 API (孵化)、Unix Domain Socket | 資料導向編程正式可用 |
| JDK 17 | 2021.09 | 密封類標準化、模式匹配 Switch (預覽)、外部記憶體/函數 API (孵化)、移除 RMI 激活、強封裝 JDK 內部 API、Apple Silicon 支援 | LTS (至 2029+)、現代化 Java 基石 |
七、現代特性成熟期:JDK 18-21
| 版本 | 時間 | 核心特性 |
| JDK 18 | 2022.03 | UTF-8 預設字符集、簡單 Web Server (jwebserver)、Code Snippets API、Vector API 三孵化、模式匹配 Switch 二預覽 |
| JDK 19 | 2022.09 | 虛擬執行緒 (Project Loom) 預覽、Record 模式 (預覽)、結構化並發 (孵化)、外部函數/記憶體 API (孵化二)、Linux/RISC-V 移植 |
| JDK 20 | 2023.03 | 範圍值 (Scoped Values) 孵化、Record 模式二預覽、模式匹配 Switch 三預覽、虛擬執行緒二預覽、結構化並發二孵化 |
| JDK 21 | 2023.09 | 虛擬執行緒 (標準化)、**結構化並發 (預覽)**、**範圍值 (預覽)**、**Record 模式 (標準化)**、**模式匹配 Switch (標準化)**、**未命名類/實例 main (預覽)**、**String 模板 (預覽)**、**分代 ZGC (標準化)**、**Key Encapsulation API** |
JDK 21 里程碑:虛擬執行緒 (Virtual Threads) — 併發模型範式轉移
// 傳統平台執行緒 (OS 線程 1:1) - 昂貴、數量受限
ExecutorService executor = Executors.newFixedThreadPool(200);
// JDK 21 虛擬執行緒 (M:N 調度) - 輕量、百萬級可行
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
for (int i = 0; i < 1_000_000; i++) {
executor.submit(() -> {
// 阻塞式 IO (資料庫、HTTP) 不再佔用平台執行緒
String resp = httpClient.get(url);
db.save(resp);
});
}
- **吞吐量提升 10-100 倍** (高併發阻塞場景)
- **代碼風格回歸同步阻塞寫法**,無需 Reactive/Callback 地獄
- **無縫兼容舊代碼**,
Thread.startVirtualThread()、Executors.newVirtualThreadPerTaskExecutor()
八、版本策略與生態現狀 (2024)
| 策略 | 說明 |
| 釋放節奏 | **每 6 個月** 一個功能版本 (3 月、9 月) |
| LTS 版本 | **每 2 年** 一個 (JDK 8, 11, 17, 21, 25...) |
| 支援週期 | Oracle: LTS 8 年 (付費);社群: 6 個月 (功能版) / 4-8 年 (LTS, 如 Eclipse Temurin, Azul Zulu) |
| 主流分發 | Eclipse Temurin (Adoptium)、Azul Zulu、Amazon Corretto、Oracle JDK、IBM Semeru、Red Hat、Google (內部) |
| 遷移建議 | **JDK 8 → 17/21 LTS**;模組化遷移 (--add-opens)、移除內部 API (sun.misc.*)、GC 調優參數更新 |
九、Java 語言核心特性總結 (官方白皮書)
- 簡單性:移除 C++ 複雜特性 (指針、多重繼承、運算子重載)
- 面向物件:單繼承、介面、多態、封裝
- 分散式:RMI、HTTP Client、微服務生態
- 解釋執行/即時編譯:JVM 跨平台、JIT 優化
- 健壯性:強類型、自動記憶體管理、異常處理
- 安全性:沙箱、類載入器、位元組碼驗證、安全管理器
- 架構中立:位元組碼與平台無關
- 可移植性:基本型別固定大小、Unicode 字符
- 高效能:JIT、AOT (GraalVM)、向量化、虛擬執行緒
- 多執行緒:內建同步、並發包、虛擬執行緒
- 動態性:反射、動態載入、代理、JVMTI
結語
從 Oak 到 JDK 21,Java 歷經 **「平台戰爭贏家」→「企業標準」→「語法現代化」→「模組化重構」→「雲原生併發重塑」** 五大階段。**虛擬執行緒 (Project Loom) 標誌著 Java 進入「輕量級併發原生」新紀元**。掌握版本演進脈絡,能幫助團隊做出理性的技術選型、遷移規劃與人才培養決策。
- 上一篇文章: JavaBean 與 Map 互轉通用工具類:基於 Introspector 的標準實作
- 下一篇文章: Java 通訊錄管理系統:基於 XML 持久化的分層架構完整實作
Copyright ©
程式碼之家 All Rights Reserved