1. 程式人生 > >JVM之棧和堆

JVM之棧和堆

棧:存放基本資料型別和物件的引用變數。

堆:存放物件。

堆主要是用來存放物件的,棧主要是用來執行程式的。相較於堆,棧的存取速度更快,但棧的大小和生存期必須是確定的,因此缺乏一定的靈活性。而堆卻可以在執行時動態的分配記憶體,生存期不用提前告訴編譯器,這也導致了其存取速度的緩慢。

堆和棧的存取如下例所示:

class Rectangle{
    private int width;
    private int length;
    public Rectangle(int width, int length){
        this.width = width;
this.length = length; } } public class Test{ public static void main(String[] args){ int i = 9; Rectangle r = new Rectangle(3, 5); } }

在上述程式進入main()方法後,資料的儲存關係如圖4-11所示:
在這裡插入圖片描述
由於i為基本資料型別的區域性變數,因此它儲存在棧空間,而r是物件的引用變數,因此也被儲存在棧空間中;實際的物件儲存在堆空間中,當main()方法退出後,儲存在棧中的i和r通過壓棧和彈棧操作將會在棧中被回收,而儲存在堆中的物件將會由垃圾回收器來自動回收。