我想知道如何在开发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"
值,该值应该在我读取关于weakReference
时返回null
为什么它没有返回null
?
首先,System.gc()
不一定要执行完整的垃圾收集运行,也不能保证它会同步执行。因此,不能保证检测到所有弱持有对象。
其次,字符串仍然被牢牢地固定住,因为它是代码中的字符串文字。它永远不能被垃圾收集,因此它的WeakReference
仍然会返回文本。