我们有一个Scala服务器在套接字上使用Protocol Buffers获取节点树,我们需要将附加数据附加到每个节点。
在单线程上下文中,当节点树和关联数据同时删除其强引用时(由于超出范围),是否有任何理由使用带有weakKeys()的Google Guava的MapMaker过度使用WeakHashMap?似乎使用MapMaker,可以支付同步访问权限,在这种情况下不需要。
顺便说一句,如果MapMaker提供对等价设置的访问权限,那么可以选择引用相等但不关心弱引用或软引用。
答案 0 :(得分:6)
WeakHashMap
的一个重要缺点是它不是“身份地图”。也就是说,它在键上使用equals()
和hashCode
(而不是==
和identityHashCode
),这对弱键实际上没有意义。您可以通过确保密钥在equals
方法中使用标识相等来解决此错误。