【发布时间】:2011-05-03 01:14:55
【问题描述】:
来自J. Bloch
... 内存泄漏的来源是 听众 ... 最好的方法来确保 回调被垃圾收集 及时是只存储弱 对它们的引用,例如,通过 仅将它们作为键存储在 WeakHashMap.
那么,为什么 Java Collections framework 中没有 WeakSet?
【问题讨论】:
-
斯塔斯,你能接受 mart 赞成的正确答案,而不是 Martin 反对的错误答案吗?
-
虽然 Joshua Bloch 为 Java 程序员写了很多合理的建议,但这似乎是一个可怕的例外。将侦听器存储到
WeakHashMap永远不会“确保回调被及时垃圾收集”,而是使它们非常不确定。垃圾收集器只会在内存不足的情况下运行,因此,这样的弱监听器可能会在任意长时间内徘徊并且仍然被执行,但更糟糕的是,当你仍然需要时,这样的监听器可能会虚假地消失它们,因为它现在需要一个实际上不相关的强引用来保持它们的生命。
标签: java collections garbage-collection weak-references