JVM、JRE、JDK 是 Java 生態三大核心概念,混淆它們會導致環境配置錯誤、部署失敗、效能調優無從下手。本文以圖解與對比表完整釐清:定義、包含關係、版本演進、選擇指南、環境變數配置實戰。
| 術語 | 全稱 | 核心內容 | 面向角色 |
|---|---|---|---|
| JVM | Java Virtual Machine | 虛擬機規範 + 具體實現 (HotSpot、OpenJ9)、類載入器、執行引擎、記憶體模型、GC | 所有 Java 程式運行基座 |
| JRE | Java Runtime Environment | JVM + 核心類庫 (rt.jar/modules) + 支援檔案 (字體、配置、插件) | 最終用戶、生產環境運行 |
| JDK | Java Development Kit | JRE + 開發工具 (javac、java、jar、javadoc、jdb、jconsole、jvisualvm...) | 開發者 |
+---------------------------+ | JDK | | +---------------------+ | | | JRE | | | | +---------------+ | | | | | JVM | | | | | | (HotSpot) | | | | | +---------------+ | | | | | 核心類庫 | | | | | | (java.*, | | | | | | javax.*) | | | | | +---------------+ | | | | +---------------+ | | | | | 開發工具 | | | | | | javac, javadoc,| | | | | | jdb, jconsole| | | | | +---------------+ | | | +---------------------+ | +---------------------------+
| 舊稱 | 新稱 (JDK 5+) | 用途 |
|---|---|---|
| J2SE | Java SE | 標準版,桌面/伺服器通用開發 |
| J2EE | Java EE → Jakarta EE | 企業版,Web/分散式企業應用 |
| J2ME | Java ME | 嵌入式/行動裝置 (已邁入歷史) |
| 場景 | 建議安裝 | 理由 |
|---|---|---|
| 本地開發、編譯、除錯 | JDK (LTS: 8, 11, 17, 21) | 需 javac、jconsole、jvisualvm、源碼附件 |
| 生產伺服器僅運行應用 | JRE 或 jlink 定製 JRE | 體積小、攻擊面小、啟動快 |
| Docker 映像構建 | 多階段建構:Build 階段用 JDK,Runtime 階段複製 .class 到精簡 JRE | 最終映像最小 (可 < 50MB) |
| 學習 JVM 內部原理 | JDK + HSDB (HotSpot Serviceability Agent) | 需 jmap、jstack、jhsdb 等診斷工具 |
推薦:生產環境優先 Eclipse Temurin LTS (17/21),免費且穩定。
JDK ⊃ JRE ⊃ JVM。開發裝 JDK,部署可裁剪 JRE,核心運行靠 JVM。理解三者邊界、版本策略、環境變數正確配置,是 Java 工程師的基本功,亦是從「會寫代碼」邁向「懂底層、會運維」的關鍵一步。