jvm中三塊主要的記憶體就是:棧記憶體,堆記憶體,方法區記憶體棧的形狀是露出一邊,從露出的這一邊進去,也是從這一邊出來。所以說,棧的特點是「先進後出」或者「後進先出」。方法區最先有資料:方法區中存放的是**片段,存放class位元組碼
棧記憶體:方法呼叫的時候,該方法需要的記憶體空間在棧中分配,並且呼叫時就是壓棧。方法不呼叫是不會再棧中分配空間的,,方法執行結束後,該方法所需要的空間就會釋放,此時發生彈棧動作。
方法呼叫叫做:壓棧,分配空間
方法結束叫做:彈棧,出棧,釋放空間
棧中儲存什麼?方法執行過程中需要的記憶體,以及棧中會儲存方法的區域性變數
如下圖:
棧幀永遠指向的是棧頂元素,棧頂元素具有活躍權。
資料data1先進入棧低,然後資料data2再進入,資料data3最後進去。
出的時候資料data3先出,然後資料data2再出,資料data1最後出棧。
結果:執行是占用記憶體情況:1.首先main方法進棧,在main裡面呼叫m1,執行到m1那行**就停止,然後給m1方法分配記憶體空間.。因為在m1方法中呼叫了m2方法,執行至呼叫m2方法時停止,然後給m2方法分配記憶體空間,因為在m2方法中呼叫了m3方法,那麼執行至m3方法時給m3方法分配記憶體空間。如下圖所示:這時m3方法是棧幀,執行完over時,整個方法執行結束,m3方法出棧。接下來棧幀指向m2方法,m2輸出over,執行完,出棧。然後棧幀指向m1方法,m1輸出over,執行完,m1出棧。棧幀指向main方法,然後輸出over,main方法出棧,此時程式執行完。main begin
m1 begin
m2 begin
m3 begin
100m3 over
m2 over
m1 over
main over
JVM學習之堆和棧
j a棧與堆 1.棧 stack 與堆 heap 都是j a用來在ram中存放資料的地方。與c 不同,j a自動管理棧和堆,程式設計師不能直接地設定棧或堆。2.棧的優勢是,訪問速度比堆要快,僅次於直接位於cpu中的暫存器。但缺點是,存在棧中的資料大小與生存期必須是確定的,缺乏靈活性。另外,棧資料可以...
JVM之Class檔案結構
但是乙個類或者介面不一定生成class檔案,classloader直接生成。各個資料項按照嚴格的順序排列在class檔案中,沒有任何分隔符,當遇到需要占用8位位元組以上的資料項時,則會按照高位在前 或低位在前 方式分割為若干個8位位元組儲存。big endian little endian。clas...
JVM棧記憶體
乙個方法相當於乙個棧幀,下面進行結構和過程解析 說白了就是存放方法內部定義的區域性變數 8大基本資料型別 string引用型別 物件引用8大基本資料型別 int short byte double char boolean float long string引用型別 string是個final類和八...