Guava MapMaker().weakKeys().makeMap()vs WeakHashMap

Bla*_*jac 6 java java.util.concurrent weakhashmap guava

我们有一个Scala服务器,它通过套接字使用Protocol Buffers获取节点树,我们需要将附加数据附加到每个节点.

在单线程上下文中,当节点树和关联数据同时删除其强引用时(由于超出范围),有没有理由使用带有weakKeys()的Google Guava的MapMaker而不是使用WeakHashMap ?似乎使用MapMaker,可以支付同步访问权限,在这种情况下不需要.

顺便说一下,如果MapMaker允许访问等价设置,那么可以选择引用相等但不关心弱引用或软引用.

Lau*_*ves 6

一个重要的缺点WeakHashMap是它不是"身份地图".也就是说,它使用equals()hashCode(而不是==identityHashCode)键,这对于弱键实际上没有意义.您可以通过确保您的密钥在其equals方法中使用标识相等性来解决此错误.