为什么弱引用仍然返回对象的值?



我想知道如何在开发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仍然会返回文本。

相关内容

  • 没有找到相关文章

最新更新