В чем разница между HashMap и WeakHashMap
WeakHashMap — это реализация Map, в которой ключи хранятся как WeakReference. Если на ключ не осталось сильных (strong) и мягких (soft) ссылок, сборщик мусора удалит ключ, и соответствующая запись будет автоматически удалена из WeakHashMap.
В Java существуют четыре типа ссылок по убыванию силы:
- Strong Reference — обычная ссылка, объект не удаляется GC.
- SoftReference — удаляется только при нехватке памяти.
- WeakReference — удаляется при ближайшей сборке мусора.
- PhantomReference — используется для финализации.
Практический сценарий: расширение объектов дополнительной информацией без модификации их классов. Объект используется как ключ в WeakHashMap, а значение — дополнительные метаданные. Когда объект становится недостижимым в основном коде, запись автоматически исчезает из карты, предотвращая утечку памяти.
WeakHashMap очищает устаревшие записи при каждом обращении к карте (get, put, size), используя ReferenceQueue для обнаружения собранных ключей.
На собеседовании: объясните через типы ссылок в Java. Приведите пример: хранение метаданных для объектов, которые могут быть собраны GC.