1、判斷對象是否已死
1.1 引用計數算法?
java沒有用引用計數算法,難於解決對象間的相互引用問題。
1.2 可達性分析算法
通過GC Roots爲起點,如果沒有達到一個對象,則不可達。
可作爲GC Roots的對象:
1)棧中的引用的對象。
2)方法區中類靜態屬性引用的對象。
3)方法區中常量引用的對象。
4)本地方法棧中JNI引用的對象。
1.3 再談引用
分類:
1)強引用
2)軟引用
3)弱引用
4)虛引用
1.4 回收方法區
回收方法區:廢棄的常量和無用的類
2、垃圾回收算法
2.1 標記-清除算法
兩階段:標記和清除
有效率和碎片問題。
2.2 複製算法
只使用內存的半區,快速和不用考慮碎片問題。
代價是隻能使用內存的一半。
新生代採用這種算法:8:1:1。
2.3 標記-整理算法
老年代採用這種算法。