Jak buforować przy słabych referencjach, gdy wartości odnoszą się do kluczy?
Używam GuawyCache<Key, Value>
. Kiedy tylkoKey
nie jest już silnie osiągalny, wpis w pamięci podręcznej powinien zostać pobrany (kiedyś ...). Za pomocąCacheBuilder.weakKeys()
zrobiłoby to dokładnie, gdyby nie było odniesieniaValue
wrócić doKey
.
Mógłbym osłabić to odniesienie, ale w każdej chwili mogłem to uczynićValue
całkiem nieważne. Mogę sobie z tym poradzić, ale wolałbym tego nie robić.
mógłbym użyćweakValues()
, ale może to prowadzić do bardzo wczesnych eksmisji, ponieważ moje wartości są przywoływane tylko przez krótki czas.
Może mógłbym użyćsoftValues()
, aleSoftReference
scałkiem zepsuty.
Prawdopodobnie mam coś nie tak ... jakie jest właściwe rozwiązanie?
AktualizacjaTo, czego potrzebuję, można osiągnąć po prostu poprzez odniesienie doValue
do każdegoKey
, ale nie jest to możliweKey
nie jest pod moją kontrolą. Gdyby tak było, nie potrzebowałbym pamięci podręcznej, żadnych słabych referencji, niczego.
W ten sposób każdyKey
zachowa jego odpowiednikValue
osiągalne, co jest w porządku1. Również każdyValue
zachowa toKey
jest osiągalny, ale to nie problem, ponieważ nie ma już długich odniesień doValue
.
1 Pewna wygasa byłaby lepsza, ale nie jest to konieczne.