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

在单线程上下文中,并且同时删除节点树和关联数据的强引用(由于超出范围)时,是否有理由使用WeakHashMap而不是将Google Guava的MapMaker与weakKeys()一起使用?似乎使用MapMaker可以为同步访问付费,在这种情况下不需要使用同步访问。

顺便说一句,如果MapMaker允许访问等效设置,则可以选择引用相等,而不关心弱引用或软引用,这将很有用。

最佳答案

WeakHashMap的一个重要缺点是它不是“身份映射”。也就是说,它在键上使用equals()hashCode(而不是==identityHashCode),对于弱键实际上没有任何意义。您可以通过确保 key 在其equals方法中使用身份相等来解决此错误。

关于java - Guava MapMaker()。weakKeys()。makeMap()与WeakHashMap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4201674/

10-09 07:20