Gymterview
middle

В чем разница между HashMap и WeakHashMap

WeakHashMap — это реализация Map, в которой ключи хранятся как WeakReference. Если на ключ не осталось сильных (strong) и мягких (soft) ссылок, сборщик мусора удалит ключ, и соответствующая запись будет автоматически удалена из WeakHashMap.

В Java существуют четыре типа ссылок по убыванию силы:

  • Strong Reference — обычная ссылка, объект не удаляется GC.
  • SoftReference — удаляется только при нехватке памяти.
  • WeakReference — удаляется при ближайшей сборке мусора.
  • PhantomReference — используется для финализации.

Практический сценарий: расширение объектов дополнительной информацией без модификации их классов. Объект используется как ключ в WeakHashMap, а значение — дополнительные метаданные. Когда объект становится недостижимым в основном коде, запись автоматически исчезает из карты, предотвращая утечку памяти.

WeakHashMap очищает устаревшие записи при каждом обращении к карте (get, put, size), используя ReferenceQueue для обнаружения собранных ключей.

На собеседовании: объясните через типы ссылок в Java. Приведите пример: хранение метаданных для объектов, которые могут быть собраны GC.