Mamy serwer Scala, który pobiera drzewo węzłów za pomocą buforów protokołów przez gniazdo i musimy dołączyć dodatkowe dane do każdego węzła.Guava MapMaker(). WeakKeys(). MakeMap() kontra WeakHashMap
W kontekście pojedynczego wątku i gdy zarówno drzewo węzłów, jak i powiązane dane będą miały usunięte silne referencje w tym samym czasie (z powodu wychodzenia z zakresu), czy istnieje jakikolwiek powód, aby używać programu Google Guava MapMaker z weakKeys () za pomocą WeakHashMap? Wygląda na to, że w programie MapMaker opłaca się dostęp synchroniczny, który nie jest w tym przypadku potrzebny.
Na marginesie, przydatne byłoby, gdyby program MapMaker dał dostęp do ustawień równoważności, aby można było wybrać równość odniesienia, ale nie dbać o słabe lub miękkie odniesienia.
Dzięki Laurence szybko zeskanowałem Javadoc i założyłem, że zostanie on zaimplementowany przy użyciu == i identityHashCode, ale bliższe czytanie pasuje do twojego opisu. –
Ponadto można nadal używać java.util.HashMap i pisać niestandardowy ReferenceEquivalence, który zawiera pojedynczy T i używa == i identityHashCode? –
Możesz, ale będziesz potrzebował czegoś, by usunąć martwe klucze z 'HashMap'. Na marginesie nie zweryfikowałem tego, patrząc na kod, ale zastanawiam się, czy usunięcie martwych kluczy/wartości jest częścią powodu, że 'MapMaker' używa' ConcurrentMap'. –