Java記憶體管理之Java堆結構是怎麼樣的?裡面有什麼東西?
阿新 • • 發佈:2018-12-09
文章目錄
一塊 Java 堆空間一般分成三部分,這三部分用來儲存三類資料:新生代、老年代、永久代。
1. 剛剛建立的物件
在程式碼執行時會持續不斷地創造新的物件,這些新建立的物件會被統一放在一起。因為有很多區域性變數等在新建立後很快會變成 不可達 的物件,快速死去 ,因此這塊區域的特點是 存活物件少,垃圾多 。形象點描述這塊區域為: 新生代;
2. 存活了一段時間的物件
這些物件早早就被建立了,而且一直活了下來。我們把這些 存活時間較長 的物件放在一起,它們的特點是 存活物件多,垃圾少
- 需要大量連續空間的Java物件
- 長期存活的物件(預設15次Minor GC後還存活的物件)
- 動態物件年齡判斷(在Survivor空間中相同年齡所有物件大小的總和大於Survivor空間的一半,年齡大於或等於該年齡的物件就可以直接進入老年代)
3. 永久存在的物件
比如一些靜態檔案,這些物件的特點是 不需要垃圾回收,永遠存活 。形象點描述這塊區域為:永久代 。(不過在 Java 8 裡已經把 永久代 刪除了,把這塊記憶體空間給了 元空間)