何时使用WeakReference?

4

我理解什么是Java的WeakReference。我想知道它通常用于哪种具体问题的解决方案。是否有包含它们的任何模式?


您可以使用它来保留与对象相关的某些属性,而不会阻止该对象的删除。 - Denys Séguret
1
请返回翻译后的文本:https://weblogs.java.net/blog/2006/05/04/understanding-weak-references(谷歌搜索结果中的第一个链接) - Christophe Roussy
1
不要忘记,您有标签本身的stackoverflow wiki:http://stackoverflow.com/tags/weak-references/info - Christophe Roussy
1
@ChristopheRoussy 哈哈,我写了那个标签的维基,应该记得并链接到它,而不是回答。 :D - Tim B
1
参见:https://dev59.com/z2gu5IYBdhLWcg3wkH2P - assylias
1个回答

9
WeakReferenceSoftReference 用于在需要时保留某个对象 - 但可能不需要它,如果确实需要,则可以重新创建它。
例如,如果您有一个从网站获取的信息缓存,您不希望不断地重新获取它,但如果您需要内存,则始终可以删除一些长时间未使用的内容,并在需要时再次获取它。 SoftReferences 特别适用于此类缓存,因为它告诉垃圾回收器除非真正需要释放内存,否则不要清除这些对象。
另一方面,WeakReference 可以被垃圾回收器随时清理。
我曾经将它们与工厂模式结合使用。在工厂中创建对象时,保留一个 SoftReference。如果再次请求它们,则返回已创建的对象。如果不存在或已被垃圾回收,则创建它们,返回并在工厂中保留 SoftReference

你能提供一个具体的例子吗? - Andres
是的,我已经在打一个了 :) - Tim B
仅仅依靠Weak/SoftReference进行缓存通常不是一个好主意,因为它可能会导致性能下降 - 使用显式的缓存策略通常更好。 - assylias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接