当地图中的条目具有弱键引用时,该条目将在下一个垃圾回收中删除,对吧?
我可以理解MapMaker
类提供了weakKeys
方法。但我对weakValue()
感到困惑。我应该何时在weakValue
使用softValue
或MapMaker
?
答案 0 :(得分:3)
当您希望将可以无法访问其值的条目进行垃圾回收时,可以使用weakValues()
。有关何时可能有用的示例...假设您有一个类,允许用户向其添加对象,并将其作为值存储在Map
中,无论出于何种原因。这个类通常用作单例,因此它会在应用程序运行的整个过程中保持不变。但是,用户添加的对象不一定是如此长寿。应用程序将在完成之前很久就完成。您不希望用户在完成它们时必须从类中手动删除这些对象,但是您不希望通过在类中永久引用它们而导致内存泄漏(换句话说,垃圾收集应该只是工作正常,无视你的班级)。解决方案是给出地图weakValues()
,一切都会按照您的意愿运作。
softValues()
适用于缓存...如果您有Map<Integer, Foo>
并且您希望条目可以移除以响应内存需求,则您需要使用它。您不希望使用weakKeys()
或softKeys()
,因为它们都使用==
身份,这会给您带来问题(无法使用密钥{{1获取值因为您传入的密钥可能不会300
地图中的密钥)。