使用WeakHashMap减少内存使用

时间:2010-03-18 21:19:40

标签: java garbage-collection weakhashmap

WeakHashMap.html的Javadoc中,它说

  

“WeakHashMap中的每个关键对象都是   间接存储为a的指示物   弱参考。因此一把钥匙会   仅在之后自动删除   内部的弱引用   一直在地图之外   被垃圾收集器清理。“

然后

  

请注意,值对象可能会引用   间接通过它的关键   WeakHashMap本身;也就是说,一个价值   对象可能强烈引用一些   其他关键对象   反过来,价值对象强烈地指   到第一个值对象的键。

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

如果GC释放了Value对象,那么Key Object也可以是免费的吗?

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

是否可以在Java中使用?

谢谢。

2 个答案:

答案 0 :(得分:1)

弱引用不适合缓存 - NetBeans会这样做,并且可能会变得很愚蠢。

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

Reference仅适用于单个参考。有人建议在Java SE中添加“ephemerons”,但我还没有看到任何实现随处可见。

答案 1 :(得分:1)

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