11. 數組
- 數組是對象,同類型同維度屬同一 Class(長度不影響)。
- 多維數組本質是一維數組嵌套(元素為數組引用)。
- 存儲於堆中,數組名為引用,通過索引訪問。
12. 異常處理機制
- 棧幀數據區保存異常表引用,記錄受
try 保護的字節碼範圍。
- 拋出異常時,JVM 查表匹配
catch 子句,轉移控制權。
13. 執行引擎與類型轉換
- 基於操作數棧(核心)、局部變量表(模擬寄存器)的棧式架構,實現平台無關性。
- 強類型轉換規則:低精度→高精度隱式,高精度→低精度需強制轉型。
14. 線程同步模型
- 線程 = 進程內執行體,遵循對象鎖、wait/notify 協議。
monitorenter/monitorexit 指令實現互斥;Object.wait() 進入阻塞隊列,notify/notifyAll 唤醒。
15. 常量池深度解析
分類與結構
- 靜態常量池:.class 文件中,入口格式
(標志位|內容),標志位標識類型(Class、Utf8、Methodref 等)。
- 運行時常量池:方法區中,類加載時動態構建,符號引用解析為直接引用的過程即動態鏈接。
核心功能
- 存儲直接常量(字面量)與符號引用(類/接口全限定名、字段/方法描述符)。
- 所有對象創建、方法/類變量調用均需從此獲取信息(實例變量除外,從堆獲取)。
- 只讀,不接受賦值操作。
16. 常量池物理結構
由大量 (入口|內容) 單元組成,索引定位入口。內容可能是直接值,也可能指向另一常量池入口(如 Class 入口指向 Utf8 存儲全限定名)。
17. 方法區結構
存儲所有類型信息:
- 常量池(直接常量 + 符號引用)
- 字段信息(名、類型、修飾符)
- 方法信息(名、返回類型、修飾符、字節碼、棧幀大小、異常表)
- 類變量(靜態字段)存儲與初始化空間,供所有實例共享
- 方法表:非抽象類專屬,數組結構存儲方法直接引用,加速調用(繼承自 Object 的方法亦包含)。
18. 堆
存儲對象實例與數組(含實例變量、指向方法區類數據的引用)。
19. 經典案例:String 比較陷阱
String a = new String("hello");
String b = new String("hello");
String c = "hello";
String d = "hello";
a == b // false:堆中兩個獨立對象
c == d // true:常量池唯一實例,雙引用指向同一地址
核心:== 比較引用地址;new 必建新對象,字面量走常量池複用。