Виды ссылок в Java и работа с WeakHashMap: краткая шпаргалка

Чем отличаются Strong Reference, SoftReference, WeakReference и PhantomReference? Для чего нужен WeakHashMap? Краткий разбор для начинающих Java-разработчиков.

Время чтения: 3 минуты
Это письмо из будущего. Я был на твоём месте
Kata Academy · Тебе письмо
Если ты готовишься к собеседованию на должность Java-разработчика, повтори виды ссылок в Java и принцип работы WeakHashMap. Это один из популярных вопросов на техническом интервью. Мы собрали основную информацию в таблицу — так ее проще запомнить.
Для этой статьи мы использовали информацию из нашей методички по Java-разработке. В ней более 100 популярных вопросов работодателей с ответами-шпаргалками. По таким методичкам наши выпускники повторяют материал курса и готовятся к собеседованиям. Подготовка проходит с ментором и карьерным консультантом. Мы сопровождаем до выхода на работу: гарантия трудоустройства прописана в договоре: если студент оплатил курс, но не нашёл работу, мы вернём 110% от стоимости обучения. Узнай подробнее о курсе «Java-разработчик» на сайте.
Четыре вида ссылок в Java. Сравнительная таблица
В Java ссылка — это переменная, которая хранит не сам объект, а ссылку на него в памяти. Именно от типа ссылки зависит, когда сборщик мусора (Garbage Collector, GC) сможет удалить объект.
Виды ссылок
  • Cильные (Strong Reference)
  • Мягкие (SoftReference)
  • Слабые (WeakReference)
  • Фантомные (PhantomReference)
Они отличаются тем, насколько «сильно» удерживают объект в памяти. Чем слабее ссылка, тем раньше GC сможет удалить объект, если он больше не нужен программе.

Сравнительная таблица

Тип ссылки

Когда объект

собирается GC?

Можно

получить

объект

через get()?

Основные

применения

Strong

Reference

Никогда, пока есть

хотя бы одна

сильная ссылка.

✅ Да

Стандартная

работа с

объектами.

SoftReference

При нехватке

памяти. Но JVM не гарантирует, что объект будет жить до возникновения OutOfMemoryError. Поведение SoftReference зависит от реализации JVM и настроек GC.

✅ Да

Кэширование с

автоматической

очисткой.


WeakReference

При любом

следующем

проходе GC, если

нет сильных

или мягких ссылок.

✅ Да

Карты кэширования,

когда объект

может исчезнуть.

PhantomReference


После того как объект стал недостижимым и перед окончательным освобождением памяти.

🚫 Нет

(всегда null)

Управление

ресурсами после

удаления объекта

Для отслеживания очистки объекта практически всегда используется ReferenceQueue.


SoftReference, WeakReference и PhantomReference могут быть зарегистрированы в ReferenceQueue. Когда объект становится недоступным, соответствующая ссылка помещается в очередь, что позволяет программе узнать о факте очистки объекта.
Учись на практике с личной поддержкой ментора, карьерного консультанта и коуча ICF! Сопровождаем до оффера ⚡
Курс «Java-разработчик»
с гарантией трудоустройства
Как запомнить
  • Strong — объект живет, пока на него есть хотя бы одна обычная ссылка.
  • Soft — объект стараются сохранить как можно дольше, но удалят при нехватке памяти.
  • Weak — объект удалят при ближайшем запуске GC, если сильных ссылок больше нет.
  • Phantom — доступа к объекту уже нет, ссылка нужна только для отслеживания момента его окончательного удаления.
Как работает WeakHashMap
WeakHashMap — это реализация интерфейса Map, которая использует WeakReference только для ключей.

Важно: значения хранятся сильными ссылками. Если значение прямо или косвенно ссылается на свой ключ, ключ не сможет быть освобожден, и запись не удалится — это может привести к утечке памяти.

Когда на ключ больше нет сильных ссылок извне, сборщик мусора (GC) может удалить его, а соответствующая запись автоматически исчезнет из WeakHashMap.

Поэтому важно помнить, что содержимое WeakHashMap меняется не только вашим кодом, но и во время работы GC. Из-за этого size(), get() или итерация могут неожиданно показать меньше записей, чем мгновение назад.

Для ключей в WeakHashMap важно понимать, что карта хранит не копию ключа, а слабую ссылку на сам объект ключа. Если единственная сильная ссылка на ключ находилась в коде вызова put(), запись может быть удалена GC.
Узнай свою рыночную зарплату за 1 минуту!
IT-калькулятор зарплат
HashMap и WeakHashMap: сравнительная таблица


HashMap

WeakHashMap

Ссылки на ключи

Сильные

Слабые

Записи удаляются GC

Нет

Да

Размер карты стабилен

Да

Нет

Подходит для кэша

Ограниченно

Для некоторых сценариев


Приглашаем тебя на курс «Java-разработчик». В программе: изучение стека с поддержкой ментора, подготовка к собеседованиям с карьерным консультантом, сопровождение до оффера. Гарантия трудоустройства прописана в официальном договоре со школой. Узнать подробности можно на бесплатной консультации, для записи оставь контакты по ссылке.
Гарантия трудоустройства прописана в договоре.
Вернем 110% от стоимости курса, если ты не найдешь работу
Ответы на популярные вопросы про виды ссылок в Java
Какие виды ссылок есть в Java?
В Java существует четыре вида ссылок: Strong Reference, SoftReference, WeakReference и PhantomReference. Они различаются тем, насколько долго удерживают объект в памяти и когда сборщик мусора может его удалить.

Чем отличается WeakReference от SoftReference?
Объект, на который ссылается SoftReference, обычно сохраняется до тех пор, пока JVM не начнет испытывать нехватку памяти. Объект, на который указывает WeakReference, может быть удален уже при ближайшем проходе сборщика мусора, если сильных ссылок на него больше нет.

Для чего нужен WeakHashMap?
WeakHashMap используют, когда записи должны автоматически удаляться после того, как ключи перестали использоваться в программе. Это удобно для некоторых видов кэширования, хранения метаданных и вспомогательных структур данных.

Почему записи могут исчезать из WeakHashMap?
Потому что ключи хранятся через WeakReference. После того как на ключ не остается сильных ссылок, сборщик мусора может удалить его вместе с записью из карты.

Что чаще всего спрашивают на собеседовании про типы ссылок в Java?
Обычно просят объяснить разницу между Strong, Soft, Weak и Phantom Reference, рассказать, когда объекты удаляются сборщиком мусора, а также объяснить принцип работы WeakHashMap и ее отличие от обычного HashMap.

Статьи для старта в IT

Истории наших выпускников

Стань тем, кто задаёт тон в ИТ!
Подпишись на нашу рассылку и первым получай статьи по Java, JavaScript, Go и QA. Позволь себе быть экспертом!