1. 程式人生 > >可達性分析算法-確定那些對象是垃圾(轉)

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

article ima -1 ability rdquo 靜態 roots 關聯 csdn

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

技術分享

在Java語言中,可作為GC Roots的對象包括下面幾種:

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

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

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

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

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

更多:

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

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