在WeakHashMap.html的Javadoc中,它说
“WeakHashMap中的每个键对象都作为弱引用的引用间接存储。因此,只有在垃圾收集器清除了地图内外对它的弱引用之后,才会自动删除键。”
然后
请注意,值对象可以通过WeakHashMap本身间接地引用其键;也就是说,值对象可以强烈地引用其他一些键对象,这些键对象的关联值对象反过来强烈地引用第一个值对象的键。
但是,在WeakHashMap中不应该同时使用键和值作为弱引用吗?也就是说,如果内存不足,GC将释放值对象所持有的内存(因为在大多数情况下,值对象最有可能占用比关键对象更多的内存)?
如果GC释放值对象,那么键对象也可以是空闲的吗?
基本上,我正在寻找一个HashMap,它将在内存不足时减少内存使用(如果有必要,GC收集值和关键对象)。
在Java中有可能吗?
谢谢。
发布于 2010-03-18 21:22:27
弱引用不适合缓存-- NetBeans会这么做,而且会变得很愚蠢。
SoftReference是你想要的。实际上很难把它做对--所以复制别人的解决方案吧。有些人建议自己明确地管理缓存。
Reference只使用单个引用。有人提议在Java中添加“暂存表”,但我还没有看到有任何实现可以这样做。
发布于 2010-03-18 21:23:11
其思想是,您可以使用此Map作为“查找”数据结构,它只保留仍然可以引用的键值对(通过键)。不过,虽然基本想法很好,但我记得它并没有我希望的那样有用。
https://stackoverflow.com/questions/2473410
复制相似问题