问题描述
我知道在 this post 中已经回答了类似的问题。但是,我仍然对 java 是否有保留循环问题感到困惑,因为 java 也有 WeakReference 类。那么,它们的目的是否相同?两者有什么区别?
解决方法
Java 没有“保留周期问题”。
这个问题存在于使用引用计数的系统中,而 Java GC 不使用。
因此在 Java 中 WeakReference
类与这些无关。这只是一种保持对某事物的引用同时又不阻止它被垃圾收集的方法
换句话说,只要有其他(强烈)引用它,您就可以使用它来记住一个对象。
此功能与 Swift 中的 weak
关键字非常相似。但是,如上所述,引用循环不会阻止对象在 Java 中被收集,因此在这种特定情况下不需要 WeakReference
。
This SO question 列出了弱引用的一些实际用途,this question 专门讨论了在 Java/Android 环境中的用途。