首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么时候会使用WeakHashMap或WeakReference?

什么时候会使用WeakHashMap或WeakReference?
EN

Stack Overflow用户
提问于 2008-09-30 20:01:55
回答 5查看 59.6K关注 0票数 166

弱引用的使用是我从未见过的实现,所以我试图弄清楚它们的用例是什么,以及实现是如何工作的。您何时需要使用WeakHashMapWeakReference?它是如何使用的?

EN

回答 5

Stack Overflow用户

发布于 2008-10-15 15:17:03

尤其是WeakReferenceWeakHashMap的一种常见用法是向对象添加属性。有时,你想给对象添加一些功能或数据,但是子类化和/或组合不是一个选项,在这种情况下,显而易见的事情是创建一个哈希图,将你想要扩展的对象链接到你想要添加的属性。然后,当您需要该属性时,您可以在地图中查找它。但是,如果要添加属性的对象往往会被销毁并大量创建,则最终会导致地图中的许多旧对象占用大量内存。

如果您使用WeakHashMap,那么一旦程序的其余部分不再使用这些对象,这些对象就会离开您的地图,这是所需的行为。

我必须这样做,以便向java.awt.Component添加一些数据,以绕过JRE1.4.2和1.5之间的变化,我可以通过对每个我感兴趣的组件(JButtonJFrameJPanel...)进行子类化来修复它。但用更少的代码,这就容易多了。

票数 30
EN

Stack Overflow用户

发布于 2008-09-30 20:05:13

例如,如果您想要跟踪某个类创建的所有对象。为了仍然允许对这些对象进行垃圾回收,您需要保留对这些对象的弱引用的列表/映射,而不是对象本身。

现在如果有人能向我解释幻影的引用,我会很高兴...

票数 3
EN

Stack Overflow用户

发布于 2008-10-01 07:53:00

如上所述,只要强引用存在,弱引用就会一直存在。

一个示例用法是在侦听器中使用WeakReference,这样一旦对其目标对象的主要引用消失,侦听器就不再活动。请注意,这并不意味着将WeakReference从listeners列表中删除,仍然需要清理,但可以在计划的时间执行。这还可以防止侦听的对象持有强引用,并最终成为内存膨胀的来源。示例:引用生命周期比窗口更长的模型的Swing GUI组件。

在使用如上所述的侦听器时,我们很快意识到,从用户的角度来看,对象是“立即”收集的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/154724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档