可達性分析算法-肯定那些對象是垃圾(轉)

在主流的商用程序語言(Java、C#,甚至包括前面提到的古老的Lisp)的主流實現中,都是稱經過可達性分析(Reachability Analysis)來斷定對象是否存活的。這個算法的基本思路就是經過一系列的稱爲「GC Roots」的對象做爲起始點,從這些節點開始向下搜索,搜索所走過的路徑稱爲引用鏈(Reference Chain),當一個對象到GC Roots沒有任何引用鏈相連(用圖論的話來講,就是從GC Roots到這個對象不可達)時,則證實此對象是不可用的。如圖3-1所示,對象object 五、object 六、object 7雖然互相有關聯,可是它們到GC Roots是不可達的,因此它們將會被斷定爲是可回收的對象。算法

 

在Java語言中,可做爲GC Roots的對象包括下面幾種:.net

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

方法區中類靜態屬性引用的對象。blog

方法區中常量引用的對象。虛擬機

本地方法棧中JNI(即通常說的Native方法)引用的對象。it

參考:http://blog.csdn.net/jtracydy/article/details/61416634變量

更多:object

http://blog.csdn.net/ochangwen/article/details/51406779搜索

相關文章
相關標籤/搜索