我什么时候应该使用MapMaker类的weakValues()?

时间:2011-03-19 16:13:57

标签: java guava

当地图中的条目具有弱引用时,该条目将在下一个垃圾回收中删除,对吧?

我可以理解MapMaker类提供了weakKeys方法。但我对weakValue()感到困惑。我应该何时在weakValue使用softValueMapMaker

1 个答案:

答案 0 :(得分:3)

当您希望将可以无法访问其值的条目进行垃圾回收时,可以使用weakValues()。有关何时可能有用的示例...假设您有一个类,允许用户向其添加对象,并将其作为值存储在Map中,无论出于何种原因。这个类通常用作单例,因此它会在应用程序运行的整个过程中保持不变。但是,用户添加的对象不一定是如此长寿。应用程序将在完成之前很久就完成。您不希望用户在完成它们时必须从类中手动删除这些对象,但是您不希望通过在类中永久引用它们而导致内存泄漏(换句话说,垃圾收集应该只是工作正常,无视你的班级)。解决方案是给出地图weakValues(),一切都会按照您的意愿运作。

softValues()适用于缓存...如果您有Map<Integer, Foo>并且您希望条目可以移除以响应内存需求,则您需要使用它。您不希望使用weakKeys()softKeys(),因为它们都使用==身份,这会给您带来问题(无法使用密钥{{1获取值因为您传入的密钥可能不会300地图中的密钥)。