兩者在概念上高度相似,Java 虛擬機(JVM)可視為一個「模擬的計算機與作業系統」。
| 維度 | 作業系統動態運行時裝載 | Java 類動態載入 |
|---|---|---|
| 執行主體 | 作業系統核心載入器 | JVM 類載入器 |
| 載入單位 | 共享庫、動態連結庫、可執行檔段 | .class 檔案(類/介面) |
| 觸發時機 | 進程啟動、dlopen()/LoadLibrary()、延遲綁定 | 首次主動使用(new、static 存取、反射、初始化子類等) |
| 名稱空間 | 全域符號表、SONAME、路徑搜尋順序 | 類全限定名 + 類載入器實例(雙親委派) |
| 依賴解析 | 重定位表、符號解析、版本檢查 | 常量池符號引用解析、驗證、準備、初始化 |
| 生命週期 | 載入→連結→初始化→使用→卸載(罕見) | 載入→驗證→準備→解析→初始化→使用→卸載(類載入器可回收) |
| 隔離機制 | 進程地址空間隔離 | 類載入器層級隔離(同一類可被不同載入器載入多份) |
| 熱替換支援 | 困難,需應用層協作 | 原生支援(JVMTI、HotSwap、OSGi、JRebel、Arthas) |
mmap()/ReadFile() 將 `.class` 位元組碼映射進記憶體。Java 類動態載入是作業系統動態裝載機制在「虛擬機」這一抽象層上的映射與延伸。理解作業系統載入器原理(重定位、符號解析、延遲綁定),能深層洞察 JVM 類載入的雙親委派、打破雙親委派、模組化封裝、熱部署等進階特性的本質動因。