Java 從 1990 年代的嵌入式語言「Oak」演變而來,隨著網際網路興起成為跨平台開發主流。本文回顧 Java 發展史,並系統整理其核心特性、JVM 架構、中介軟體角色與已知弱點。
發展歷程
- 1990-1994:Sun 公司 James Gosling 領導「Green 專案」,開發 Oak 語言,目標為家電嵌入式系統(互動式電視)。因 MPEG 標準未定案而暫停。
- 1995:更名為 Java,Sun 正式發布 JDK 1.0,主打「Write Once, Run Anywhere」跨平台特性,乘網際網路浪潮迅速普及。
- 1998:J2EE (Java 2 Enterprise Edition) 推出,確立企業級開發標準 (Servlet, EJB, JMS, JTA 等)。
- 2006:Sun 開源 Java (OpenJDK),GPLv2 授權。
- 2010:Oracle 收購 Sun,接管 Java 發展。
- 2017-至今:Java 9 引入模組系統,Java 11/17/21 為長期支援 (LTS) 版本,六個月釋出節奏。
核心特性 (Java 白皮書關鍵字)
| 特性 | 說明 |
| 簡單性 | 移除 C++ 複雜特性 (指標、多重繼承、運算子多載),語法接近 C/C++,易上手。 |
| 物件導向 | 核心為類別/物件,支援封裝、繼承、多型,單根繼承 (Object)。 |
| 分散式 | 內建網路庫 (java.net)、RMI、支援 URL 存取資源如同本地檔案。 |
| 健壯性 | 強型別、例外處理、自動記憶體管理 (GC)、編譯期/執行期檢查。 |
| 安全性 | 沙箱模型、類別載入器隔離、位元組碼驗證、安全性管理員、加密 API。 |
| 架構中立 | 編譯為平台無關的位元組碼,由 JVM 解譯/即時編譯執行。 |
| 可攜性 | 基本型別大小固定 (int 32-bit 等)、字元採 Unicode、標準庫抽象平台差異。 |
| 多執行緒 | 內建 Thread 類別、synchronized、java.util.concurrent 高階併發工具。 |
| 動態性 | 執行期類別載入、反射、動態代理、支援熱部署/熱替換。 |
| 高效能 | JIT 編譯器、逃逸分析、內聯優化、現代 GC (G1, ZGC, Shenandoah) 低延遲。 |
跨平台四維度
- 跨作業系統/硬體:同一組 .class 檔在 Windows/Linux/macOS/Solaris/AIX 上執行。
- 跨網路:B/S 架構 (Browser/Server),三層結構:Client / Web/App Server / DB Server。
- 跨語言 (國際化):
java.util.Locale, ResourceBundle, Unicode 內建支援多語系。
- 跨時間 (版本相容):向後相容極佳,舊位元組碼可在新 JVM 執行,模組系統強化封裝。
JVM (Java 虛擬機器) 架構
軟體 CPU:模擬一個基於堆疊的指令集架構。
- 類別載入子系統:Bootstrap / Extension / Application 三層載入器,雙親委派模型。
- 執行引擎:解譯器 + JIT 編譯器 (C1 Client / C2 Server) + 即時編譯決策。
- 記憶體區域:
- 堆 : 物件實例、陣列 (GC 主戰場)
- 方法區 : 類別中繼資料、常數池、靜態變數 (Metaspace, Java 8+)
- Java 虛擬機堆疊 : 執行緒私有、棧框 (局部變數表、運算堆疊、動態連結、方法返回地址)
- 本地方法堆疊 : Native 方法呼叫
- 程式計數器 : 當前執行指令位址
- 垃圾收集器:Serial, Parallel, CMS, G1, ZGC, Shenandoah,分代/區域/並發/低延遲演進。
中介軟體角色
Java Client 通常為「瘦客戶端」,商業邏輯與資料存取下沉至中介層 (Application Server: WebLogic, JBoss/WildFly, Tomcat+Spring, WebSphere 等)。中介軟體提供:
- 交易管理 (JTA)
- 連線池/資料來源
- 安全性/角色存取控制
- 叢集/負載平衡/失效轉移
- 訊息佇列 (JMS)
中介軟體本身運行於 JVM 之上,故同樣具備跨平台特性,解決異構環境整合問題。
已知弱點與挑戰
- 啟動/暖機較慢:JVM 啟動、類別載入、JIT 編譯需時間,不適合極短命程序 (Serverless 冷啟動挑戰)。
- 記憶體佔用較大:JVM 基礎開銷 (Metaspace, Code Cache, Thread Stacks, GC 保留) 通常 > 100MB。
- 安全性攻擊面:反序列化漏洞、Log4j2 RCE、不安全的反射/代理用法,需持續修補與最小權限原則。
- GUI 應用體驗:Swing/JavaFX 與原生 UI 風格差異,桌面應用市佔率低。
- 大型單體應用啟動慢:類別掃描、依賴注入容器初始化 (Spring) 耗時,微服務化、GraalVM Native Image 為改善方向。
現代 Java 生態關鍵字
- 模組系統 (JPMS):
module-info.java、強封裝、自訂運行時映像 (jlink)。
- GraalVM Native Image:提前編譯 (AOT) 為原生執行檔,毫秒級啟動、低記憶體。
- Virtual Threads (Java 21+):輕量級執行緒 (綠色執行緒),百萬級併發不再依賴平台執行緒。
- Records / Pattern Matching / Sealed Classes:資料導向程式設計語法糖。
- Spring Boot 3 / Quarkus / Micronaut:雲原生框架,支援 GraalVM、Virtual Threads、觀測性。