为什么不推荐使用MapMaker.softKeys()?

时间:2012-03-18 11:41:42

标签: java guava weak-references

  

可能重复:
  Why is softKeys() deprecated in Guava 10?

JavaDoc中不推荐使用MapMaker.softKeys()的原因:

  

使用softValues创建对内存敏感的地图,或使用weakKeys创建   没有强烈引用键的地图。 这个方法是   计划于2013年1月删除。

     

此方法已被破解。使用软键的地图与使用弱键的地图相比没有任何功能优势,并且通过保留来浪费内存   地图中无法到达的元素。如果你的目标是创建一个   对内存敏感的地图,然后考虑使用软值。

     

指定存储在地图中的每个键(不是值)应该是   包装在SoftReference中(默认情况下,使用强引用)。   软件引用的对象将在全局中进行垃圾收集   最近最少使用的方式,以响应内存需求。

我不明白为什么软值比软键更喜欢?任何情况? MapMaker.softValues()仍然可用。谢谢!

1 个答案:

答案 0 :(得分:3)

包含软项和弱项的地图有两个主要用例:

  • <强>缓存即可。具有软值的映射可以充当对内存敏感的缓存。由于需要空闲内存时收集缓存的软引用条目的语义。

  • 规范化映射。有时您需要将其他属性(值)与现有对象(键)相关联。这种关联不应该阻止密钥被收集,并且在密钥被收集后没有意义。这种关联可以实现为具有弱密钥的映射。

请注意,在后一种情况下使用软键而不是弱键没有任何意义并导致不必要的内存使用,因此软键没有实际用途,这就是它们被弃用的原因。