在WeakHashMap.html的Javadoc中,它说
“WeakHashMap中的每个关键对象都是 间接存储为a的指示物 弱参考。因此一把钥匙会 仅在之后自动删除 内部的弱引用 一直在地图之外 被垃圾收集器清理。“
然后
请注意,值对象可能会引用 间接通过它的关键 WeakHashMap本身;也就是说,一个价值 对象可能强烈引用一些 其他关键对象 反过来,价值对象强烈地指 到第一个值对象的键。
但是,WeakHashMap中是否应该使用Key和Value两个弱引用? 即如果内存不足,GC将释放值对象占用的内存(因为在大多数情况下,值对象最有可能占用比关键对象更多的内存)?
如果GC释放了Value对象,那么Key Object也可以是免费的吗?
基本上,我正在寻找一个HashMap,它会在内存不足时减少内存使用量(GC会在必要时收集值和密钥对象)。
是否可以在Java中使用?
谢谢。
答案 0 :(得分:1)
弱引用不适合缓存 - NetBeans会这样做,并且可能会变得很愚蠢。
SoftReference
就是你想要的。实际上很难做到正确 - 所以复制别人的解决方案。有些人建议您自己明确管理缓存。
Reference
仅适用于单个参考。有人建议在Java SE中添加“ephemerons”,但我还没有看到任何实现随处可见。
答案 1 :(得分:1)
这个想法是你可以使用这个Map作为“查找”数据结构,它只保持键值对仍然可以被引用(通过键)。尽管如此,虽然基本想法很好,但我记得它没有我希望的那么有用。