Лучшая идея, которую я видел для этого, это обернуть LinkedHashMap
, чтобы все, что вы put
включили в него, было Слабая ссылка .
ОБНОВЛЕНИЕ: Просто просмотрите источник WeakHashMap
и то, как он обрабатывает все, что делает WeakReference
, все еще хорошо играя с дженериками, просто. Вот сигнатура основного класса, которую он использует:
private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V>
Я предлагаю более подробно изучить источник для других идей реализации.
ОБНОВЛЕНИЕ 2: kdgregory поднимает хорошую мысль в своем комментарии - все, что я предлагаю, это убедиться, что ссылки в Map
не будут препятствовать тому, чтобы референт собирался мусором. Вам все еще нужно вычистить мертвые ссылки вручную.