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

一、引用計數算法

1、基本思想

給對象中添加一個引用計數器,每當有一個地方引用它時,計數器值就加1;
當引用失效時,計數器值就減1;任何時刻計數器爲0的對象就是不可能再被使用的。

2、優缺點
  • 優點:實現簡單,判定效率高。
  • 缺點:很難解決對象之間相互循環引用的問題。(因此主流的java虛擬機中沒有選用此方法)

二、可達性分析算法

通過一系列被稱爲"GC Roots" 的對象作爲起始點,從這些節點開始向下搜索,搜索所走過的路徑稱爲引用鏈(Reference Chain),當一個對象到GC Roots沒有任何引用鏈相連(即,對象不可達)時,則證明此對象不可用。
注:可作爲GC Roots的對象包括:

  • 虛擬機棧(棧幀中的本地變量表)中引用的對象
  • 方法區中類靜態屬性應用的對象。
  • 方法區中常量引用的對象
  • 本地方法棧中JNI引用的對象
2、在主流的商用程序語言的主流實現中,都是通過可達性分析算法來判斷對象是否存活的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章