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(), aleSoftReferencescałkiem zepsuty.

Prawdopodobnie mam coś nie tak ... jakie jest właściwe rozwiązanie?

Aktualizacja

To, 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.

questionAnswers(4)

yourAnswerToTheQuestion