jvm學習一 引用計數器

1.概念

引用計數器算法算是一種古老的java垃圾回收算法,目前很多版本的java已經廢棄掉這種算法了。不過多瞭解歷史解決方案也是很有好處的,通過總結它的優缺點,再與新算法比較,可以幫助更好的理解新算法。

2.算法描述

定義:給每個對象分配一個計算器,當有引用指向這個對象時,計數器加1,當指向該對象的引用失效時,計數器減一。最後如果該對象的計算器爲0時,java垃圾回收器會認爲該對象是可回收的。

3.優點

實時性
無需等到內存不夠的時候,纔開始回收,運行時根據對象的計數器是否爲0,就可以直接回收。

應用無需掛起
在垃圾回收過程中,應用無需掛起。如果申請內存時,內存不足,則立刻報outofmember 錯誤。

區域性
更新對象的計數器時,只是影響到該對象,不會掃描全部對象
4.缺點

1.浪費cpu,即使內存夠用,仍然在運行時進行計數器的統計

2.每次對象被引用時,都需要去更新計數器,有一點時間開銷。另外無法解決循環引用問題。

例如:

class TestA{
  public TestB b;

}
class TestB{
  public TestA a;
}
public class Main{
    public static void main(String[] args){
        A a = new A();
        B b = new B();
        a.b=b;
        b.a=a;
        a = null;
        b = null;
    }
}

雖然a和b都爲null,但是由於a和b存在循環引用,這樣a和b永遠都不會被回收。

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