1. 程式人生 > >堆,棧中存的都是啥?簡單易懂

堆,棧中存的都是啥?簡單易懂

 關於堆疊的內容網上已經有很多資料了,這是我找的加上自己理解的一篇說明文:

一:概念

1.棧:當程式進入一個方法時,會為這個方法單獨分配一塊私屬儲存空間,用於儲存這個方法內部的區域性變數,當這個方法結束時,分配給這個方法的棧會被釋放,這個棧中的變數也將隨之釋放。

2.推:存放不在當前方法棧中的那些資料

二、記憶體區域型別

1.暫存器:最快的儲存區, 由編譯器根據需求進行分配,我們在程式中無法控制;

1. 棧:存放基本型別 的變數資料和物件的引用,但物件本身不存放在棧中,而是存放在堆(new出來的物件)或者常量池中(字串常量物件存放的常量池中),區域性變數注意:(方法中的區域性變數使用final修飾後,放在堆中,而不是棧中)

2.堆:存放使用new建立的物件,全域性變數

3. 靜態域:存放靜態成員(static定義的);

4. 常量池:字串常量和基本型別常量(public static final)。有時,在嵌入式系統中,常量本身會和其他部分分割離開(由於版權等其他原因),所以在這種情況下,可以選擇將其放在ROM中 ;

5. 非RAM儲存:硬碟等永久儲存空間

三、棧中放的東西,圖示:

JAVA堆裡放啥,棧裡放啥,一看就懂

JAVA堆裡放啥,棧裡放啥,一看就懂

四、堆存放示意圖:

JAVA堆裡放啥,棧裡放啥,一看就懂

對於String類的物件特別說明一下:

JAVA堆裡放啥,棧裡放啥,一看就懂