Java 虛擬機(JVM)是 Java 跨平台的基石,理解其內部運作機制對排查記憶體洩漏、效能調優、解決類衝突至關重要。本文從規範定義、生命週期、體系架構三個維度,系統梳理 JVM 核心知識體系。
「Java 虛擬機」根據語境指代不同東西:
java -jar app.jar 時建立的進程實體JVM 實例誕生於啟動類的 public static void main(String[]) 執行前。類載入器先載入啟動類,驗證、準備、解析、初始化(<clinit>),最後執行 main 方法。啟動類名由啟動參數或 JAR 清單指定。
JVM 內部區分兩類執行緒:
thread.setDaemon(true) 標記main 執行緒及其衍生的非守護執行緒JVM 退出規則:只要存在任一使用者執行緒存活,JVM 就不會退出。所有使用者執行緒結束(正常返回或未捕獲異常終止)時,JVM 自動關閉。程式亦可透過 System.exit() 或 Runtime.getRuntime().exit() 主動終止。

儲存已載入類型的元資料,屬於共享區域。核心內容:
ClassLoader 與 Class 物件的引用HotSpot 以「永久代」實現方法區,JDK 8 移至元空間使用本地記憶體。
堆是 GC 主戰場,分代收集(新生代/老年代)是核心策略。
棧幀結構:區域變數區 | 操作數棧 | 棧資料區(動態連結、方法出口等)
OutOfMemoryError 的區域服務 native 方法執行,HotSpot 合併 Java 棧與本地方法棧實現。
<JAVA_HOME>/lib 下核心類庫java.lang.ClassLoader,載入應用類載入流程:載入 → 驗證 → 準備 → 解析 → 初始化。雙親委派保證核心類庫不被竄改,也避免重複載入。
執行引擎同樣有三重含義(規範、實現、實例)。行為由位元組碼指令集定義,每條指令規定操作數棧變化與副作用。HotSpot 採用「解釋執行 + JIT 編譯」混合模式:熱點程式碼編譯為機器碼直接執行,兼顧啟動速度與峰值效能。
JVM 知識體系浩瀚,建議配合 深入理解 Java 虛擬機、官方規範文檔與源碼閱讀,在生產環境調優中建立直覺。