本模組深入探討 Java 虛擬機器(JVM, Java Virtual Machine)的核心機制,從類別載入、記憶體模型到垃圾回收(Garbage Collection),協助你理解 Java 程式碼從編譯到執行的完整生命週期。

為什麼需要深入理解 JVM?#

JVM 是 Java 生態系的基石。深入理解 JVM 不僅能協助你寫出更高效的程式碼,更能在系統出現效能瓶頸或記憶體問題時快速定位並解決問題。

身為 Java 開發者,你可能遇過以下問題:

  • 應用程式頻繁發生 Full GC,導致回應延遲
  • OutOfMemoryError 突然出現,但不知如何排查
  • 程式碼效能不如預期,卻找不到最佳化方向
  • 面對各種 JVM 參數,不知如何調校

這些問題的根源,往往在於對 JVM 運作機制的不夠了解。本模組將系統性地帶你掌握 JVM 的核心知識。

Java 程式碼的執行流程#

在深入各個主題之前,讓我們先建立一個整體的認知:Java 程式碼是如何被執行的?

┌──────────────┐     javac      ┌──────────────┐
│  .java 檔案   │  ──────────>  │  .class 檔案  │
│  (原始碼)     │               │  (位元組碼)    │
└──────────────┘               └───────┬──────┘
                                       v
┌─────────────────────────────────────────────────────────────┐
│                    Java 虛擬機器 (JVM)                        │
│  ┌─────────────────────────────────────────────────────┐   │
│  │               類別載入子系統                          │   │
│  │    載入 → 驗證 → 準備 → 解析 → 初始化                  │   │
│  └─────────────────────────┬───────────────────────────┘   │
│                            │                               │
│                            v                               │
│  ┌─────────────────────────────────────────────────────┐   │
│  │               執行時資料區域                          │   │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐   │   │
│  │  │  堆積區  │ │ 方法區   │ │ VM 堆疊  │ │ PC 暫存器│   │   │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘   │   │
│  └─────────────────────────┬───────────────────────────┘   │
│                            │                               │
│                            v                               │
│  ┌─────────────────────────────────────────────────────┐   │
│  │               執行引擎                               │   │
│  │    解譯器 + JIT 編譯器 (C1/C2) + 垃圾回收器           │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

HotSpot 虛擬機器採用混合執行模式:解譯器(Interpreter)負責快速啟動,即時編譯器(JIT, Just-In-Time Compiler)將熱點程式碼編譯為本機機器碼以提升執行效率。這種設計兼顧了啟動速度與長期執行效能。

學習路徑建議#

初學者路徑

如果你是 JVM 新手,建議依下列順序學習:

  • 記憶體模型 — 先理解 JVM 的記憶體結構
  • 類別載入 — 了解類別如何被載入到記憶體
  • 垃圾回收 — 掌握記憶體如何被自動回收
  • 位元組碼 — 深入理解程式碼執行細節
  • 調校實戰 — 將理論應用到實際場景
進階學習路徑

如果你已有一定基礎,可以重點關注:

  • G1 與 ZGC 深入 — 現代垃圾回收器的原理與調校
  • JIT 編譯最佳化 — 理解編譯器如何最佳化你的程式碼
  • 效能問題排查 — 實戰案例分析與工具使用
  • JVM 參數調校 — 針對不同場景的最佳實踐

實用工具清單#

工具用途使用場景
javap反組譯 class 檔案查看位元組碼指令
jps列出 Java 程式查找目標 JVM 程式 ID
jstatJVM 統計監控監控 GC、類別載入等
jmap記憶體映射產生堆積傾印
jstack執行緒堆疊排查死鎖、執行緒問題
jconsole圖形化監控即時監控 JVM 狀態
VisualVM綜合分析工具效能分析、記憶體分析
JOL物件佈局分析分析物件記憶體佈局
ASM位元組碼操作動態生成或修改類別

開始學習#

選擇以下任一主題開始你的 JVM 深入之旅: