1.1數據區域
1.1.1 程序計數器
-爲了線程切換後能恢復到正確的執行位置每個線程需要一個獨立的程序計數器
1.1.2 java虛擬機棧
-指虛擬機棧中局部變量表部分 包括:基本數據類型、對象引用、returnAddress(指向一條字節碼指令地址)
-異常:1)線程請求的棧深度大於虛擬機所允許的深度,拋出StackOverflowError異常
2)如果虛擬機棧可以動態擴展,如果擴展時無法申請到足夠的內存,就會拋出OutofMemoryError異常
1.1.3 本地方法棧
-指虛擬機使用到的Native方法
1.1.4 java堆
-存放對象實例
1.1.5 方法區
-包括:類信息、常量、靜態變量、即時編譯器編譯後的代碼
1.2HotSpot虛擬機對象
1.2.1對象創建
步驟:new->類檢查->分配內存->分配到的內存空間初始化爲零->設置對象->init
1.2.2對象的內存佈局
1)對象頭-包括存儲對象自身的運行時數據、類型指針
2)實例數據
3)對齊填充-佔位符
1.2.3對象訪問定位
1)句柄訪問
2)直接指針訪問