我想知道如何在开发Android应用程序时使用WeakReference
。因为我在互联网上搜索了很多,我输入了这段代码:
{
String kk = "Test";
WeakReference<String> kkRef = new WeakReference<String>(kk);
System.out.println(kk);
System.out.println(kkRef.get());
kk = null;
System.gc();
System.out.println(kk);
System.out.println(kkRef.get());
}
假设kk
对象符合GC
的条件,但在控制台输出中,似乎kkRef.get()
仍然返回应该返回"Test"
的{{1}}值当我读到null
那么为什么它没有返回weakReference
?
答案 0 :(得分:2)
首先,System.gc()
不一定执行完整的垃圾收集运行,并且无法保证它将同步执行。因此,无法保证检测到所有弱持物体。
其次,字符串仍然保持强烈,因为它是代码中的字符串文字。这不能被垃圾收集,所以WeakReference
仍然会返回文字。