java讀書筆記---垃圾回收

wuhulala發表於2017-03-02

1. 如何判定一個類是無用的類

  1. 該類的所有例項被回收,意思就是java堆中不存在該類的任何例項。
  2. 載入該類的ClassLoader已經被回收
  3. 該類對用的java.long.Class物件沒有在任何地方被引用,無法在任何地方通過反射訪問該類的方法。

2. 垃圾回收演算法

1.標記-清除方法

標記需要回收的物件,直接清除物件所對應的的記憶體區域。

這裡寫圖片描述

2.複製演算法

複製不需要回收的記憶體塊到另一塊記憶體中,清除當前塊的內容。如下圖

這裡寫圖片描述

3.標記整理演算法

標記需要回收的物件的記憶體塊,清除掉之後,把剩餘的記憶體塊依次按照一個方向排列,如下圖

這裡寫圖片描述

4.分代收集演算法

當前商業虛擬機器使用的都是分代收集方法 一般分為eden區,from - to Survivor區,老年代

eden(伊甸)區一般是新的物件存活的位置

from區與to區是兩塊大小相同的記憶體塊,在垃圾回收的時候eden區和from中存活的物件會複製到to區。然後清除掉eden區和from區。並且from將會為to區,to為from區。

老年代存放的是經過多次垃圾回收存放下的物件,一般不會回收老年代的物件。

相關文章