Я кеш, реализованных с WeakHashMap, как это:мусора коллектор работа с 2 WeakHashMaps
private static WeakHashMap<Object, WeakReference<Object>> objects = new WeakHashMap<>();
У меня есть экземпляр класса Город:
City c = new City();
я теперь добавить этот экземпляр моей карте например:
objects.put(c, new WeakReference<Object>(c));
В соответствии с реализацией jvm WeakHashMap, если у ключа нет сильных ссылок на он удаляется с карты (в свободное время).
Итак, если мой объект «c» больше не используется в программе, он будет удален с карты «объекты».
Пока, так хорошо.
Но что произойдет, если у меня есть две карты?
private static WeakHashMap<Object, WeakReference<Object>> objects1 = new WeakHashMap<>();
private static WeakHashMap<Object, WeakReference<Object>> objects2 = new WeakHashMap<>();
City c = new City();
objects1.put(c, new WeakReference<Object>(c));
objects2.put(c, new WeakReference<Object>(c));
Будет ли GC собирать объект «c» в этом случае?
Если Косые решает воспользоваться объектом, ** всех ** слабых ссылок на него будут соответствующим образом аннулированы. –
Почему вы обертываете значение HashMap в WeakReference? вы не должны этого делать, вы можете иметь нулевые значения в этом случае –
@EliaRohana Он не может быть пустым, если он используется где-то еще. – AndreyP