GC判斷對象是否存活的算法

  1.  引用計數法:

算法描述:給對象中添加一個引用計數器,每當一個地方引用他時,計數器值就加1;當引用失敗時,計數器值就減一;任何時刻計數器爲0的對象就是不可能在被使用的。

優點:引用計數器算實現簡單,判定效率也很高。

缺點:很難解決對對象之間相互循環的引用的問題,比如兩個對象,testA、testB,其中testA.instance = testB,testB.instance = testA,就存在這種問題

      2. 可達性分析算法:

算法描述:通過一系列的稱爲"GC Roots"的對象作爲起始點,從這些節點開始向下搜索,搜索所走過的路徑稱爲引用鏈,當一個對象到GC Roots,沒有任何引用鏈相連(用圖論來講,就是從GC Roots到這個對象不可達)時,則證明此對象時不可用的。

如圖所示:

在Java語言中,可作爲GC Roots的對象包括以下對象:

1. 虛擬機棧(棧幀中的本地變量表)中的引用的對象

2. 方法區中類靜態屬性引用的對象

3. 方法區中常量引用的對象

4. 本地方法棧中JNI(即一般說的Native方法)引用的對象

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