天天看點

JVM運作時資料區(堆、棧、方法區)指向關系

運作時資料區:

1.線程共享區:堆,方法區

堆:存放一切new出來的東西(java對象執行個體和數組)。

方法區:存放被虛拟機加載的類資訊、常量、靜态變量、即時編譯器編譯後的代碼等資料。

2.線程獨占區:棧、本地方法棧、程式計數器

棧:java線程的運作狀态存儲在棧中;每一個被執行的方法為棧中的棧幀。每個棧幀包括:局部變量表(方法中定義的變量及方法中的參數)、操作數棧(以壓棧和出棧的方式存儲操作數)、動态連結(每個棧幀中都包含一個指向運作時常量池中該棧幀所屬方法的引用)、方法傳回位址(當一個方法開始執行後隻有兩種方式可以退出,一遇到方法傳回的位元組碼指令,二遇到異常且這個異常沒有在方法中得到處理)。

程式計數器:記錄線程執行到的位置。

本地方法棧:當線程執行的方法是native類型的,該方法就會在本地方法棧中執行。

1.棧指向堆:Object obj=new Object();因為new出來的一切都存放在堆中,而obj則是存放在棧中。

2.方法區指向堆:private static Object obj=new Object();因為方法區中存放常量、靜态變量、虛拟機加載後的類資訊等,所有obj是存放在方法區中,而new出來的一切都存放在堆中。

3.堆指向方法區:

JVM運作時資料區(堆、棧、方法區)指向關系
JVM運作時資料區(堆、棧、方法區)指向關系

繼續閱讀