1

WeakHashMap.html的 Javadoc 中,它说

“WeakHashMap 中的每个键对象都间接存储为弱引用的引用。因此,只有在映射内部和外部的弱引用已被垃圾收集器清除后,才会自动删除键。”

进而

请注意,值对象可以通过 WeakHashMap 本身间接引用其键;也就是说,一个值对象可以强引用某个其他键对象,其关联的值对象反过来又强引用第一个值对象的键。

但是在 WeakHashMap 中不应该同时使用 Key 和 Value 的弱引用吗?即如果内存不足,GC 将释放值对象持有的内存(因为在大多数情况下,值对象很可能比键对象占用更多的内存)?

如果 GC 释放 Value 对象,Key 对象也可以释放吗?

基本上,我正在寻找一个 HashMap,它可以在内存不足时减少内存使用量(GC 会在必要时收集值和键对象)。

在Java中可能吗?

谢谢你。

4

2 回答 2

1

弱引用不适合缓存 - NetBeans 可以做到这一点,而且可能会变得愚蠢。

SoftReference是你想要的。实际上很难做到正确 - 所以复制别人的解决方案。有些人建议自己明确管理缓存。

References 仅适用于单个参考。有一个向 Java SE 添加“ephemerons”的提议,但我还没有看到任何实现。

于 2010-03-18T21:22:27.810 回答
1

这个想法是,您可以将此 Map 用作“查找”数据结构,它只保持仍然可以引用的键值对(通过键)。尽管如此,虽然基本的想法很好,但我记得它并没有我希望的那么有用。

于 2010-03-18T21:23:11.237 回答