来自J. Bloch
一个......内存泄漏的来源是监听器......确保回调被及时垃圾收集的最佳方法是只存储对它们的弱引用,例如,将它们仅作为键存储在 WeakHashMap中。
那么,为什么 Java Collections 框架中没有 WeakSet呢?
来自J. Bloch
一个......内存泄漏的来源是监听器......确保回调被及时垃圾收集的最佳方法是只存储对它们的弱引用,例如,将它们仅作为键存储在 WeakHashMap中。
那么,为什么 Java Collections 框架中没有 WeakSet呢?
Collections.newSetFromMap
Set<Object> weakHashSet =
Collections.newSetFromMap(
new WeakHashMap<Object, Boolean>()
);
如文档中所见Collections.newSetFromMap
,传递 aWeakHashMap
以获取Set
.
虽然您确实可以使用Collections.newSetFromMap()
来获取 WeakSet,但它的用例实际上非常有限。
如果你想实现类似的东西,String.intern()
你可能想看看 Guava 的Interners.newWeakInterner()
功能。