JAVA基礎篇003-棧內存、堆內存、垃圾回收機制

目錄

一、棧內存(stack)

二、堆內存(heap)

三、垃圾回收機制 (GC)


一、棧內存(stack)

1)定義:編譯器自動分配和釋放的一塊內存區域,類似於數據結構的棧;

2)存放內容:定義在方法中、局部代碼塊中的局部變量;

3)管理:所佔用的空間直到相對應的代碼塊、方法執行完就立即自動釋放;

4)優點:存取速度快,僅次於寄存器,數據可共享;

5)缺點:數據大小與生存期必須是確定的,缺乏靈活性。

二、堆內存(heap)

1)定義:程序運行時動態分配的內存區域,類似於數據結構的鏈表;

2)存儲內容:通過new建立的實體,每一個實體都有自己的內存地址值,實體中的變量都有默認的初始化值;

3)管理: 當實體不再被使用的時候,會在不確定的時候,由垃圾回收器 (GC)回收(釋放空間);

4)優點:動態“按需分配”內存大小,生存期不必事先告訴編譯器,使用完畢後,GC會自動收走這些不再使用的內存塊;

5)缺點:由於要在運動時才動態分配內存,相比於棧內存,它的存取速度較慢。

三、垃圾回收機制 (GC)

1)垃圾生成時間:當一個堆內存中的對象在棧中沒有引用指向它的時候,這個對象就被JVM視爲垃圾;

2)垃圾回收時間:垃圾不會被立刻回收,而是在未知的時間點,JVM啓動GC來回收這個對象所佔用的空間,無需手動清理;

PS:

int[] x =new int[3];

int[] y =x;

y[1] =89;

x =null;

這段程序執行完之後,在堆內存中有沒有垃圾對象?

分析:由於x變成null之前,已經把數組的首地址的值傳給了y,所以x變成null之後,y還是指向了內存中的數組對象,程序執行完之後,對內存中的數組對象在棧內存中仍然有引用變量指向它,所以堆內存中沒有垃圾對象。

如圖:

JAVA基礎篇專欄持續更新中,更多JAVA基礎知識請移步專欄垂閱,希望對您有幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章