我通過下面的帖子在Java回事弱引用沒有強引用: -WeakReference的不返回null,雖然有實際的參考對象
Understanding Weak References.
通過後去理論部分,試圖對空條件的弱參考進行測試。但是,對於弱引用空檢查從未返回下面的代碼真: -
package com.weak;
import java.lang.ref.WeakReference;
class Widget{}
public class WeakReferenceDemo {
public static void main(String[] args) throws InterruptedException {
Widget widget = new Widget() ;
WeakReference<Widget> valueWrapper = new WeakReference<Widget>(widget) ;
System.out.println(valueWrapper.get());
//here strong reference to object is lost
widget = null ;
int count = 0 ;
//here checking for null condition
while(valueWrapper.get() != null){
System.out.print(".");
Thread.sleep(432) ;
if(++count % 25 == 0) System.out.println();
}
System.out.println(valueWrapper.get());
}
}
請建議,爲什麼valueWrapper.get()沒有返回null,雖然構件引用賦值爲null值。
謝謝。
GC不是引用計數,當您將該引用歸爲空時,GC甚至不知道它 - 它會在下一個GC週期中找到它。 – harold
@harold:upvoting。 – mogli