首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JVM 學習筆記(二):數組、異常、執行引擎、線程、常量池、堆

     編輯:Java 相關知識

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 必建新對象,字面量走常量池複用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved