Что верно про типы ссылок в Java?
Strong — не собирается, пока достижим. Soft — очищается при нехватке памяти (кэш, который не жалко). Weak — на ближайшей сборке, если нет сильных ссылок (WeakHashMap, метаданные). Phantom — get() всегда null, сигнал после финализации для очистки ресурсов (Cleaner).
- ReferenceQueue — узнать, что объект собран
- Soft-кэш непредсказуем — лучше Caffeine с явным размером
- WeakHashMap слабо держит ключи, а не значения
А ещё Значение, ссылающееся на свой ключ, не даст WeakHashMap очистить запись
Подробно
Сила ссылки определяет, когда объект может быть освобождён. Практическая разница soft и weak именно в моменте: мягкая ссылка живёт, пока хватает памяти, и потому подходит для кэша, который не жалко потерять; слабая исчезает при первой же сборке, и на ней строят WeakHashMap и хранение метаданных, не удерживающее ключи. Фантомная не даёт доступа к объекту вовсе — её ставят в очередь ReferenceQueue, чтобы освободить внешние ресурсы уже после того, как объект стал недостижим. Важная оговорка: гарантий по soft-ссылкам спецификация не даёт, и опираться на них как на управляемый кэш рискованно.
Что хотят услышать
- Момент очистки для каждого типа.
- Применение каждого.
Частые ошибки
- Считать SoftReference надёжным кэшем с предсказуемым поведением.
- Пытаться получить объект через PhantomReference.get().
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗SoftReference гарантированно переживает любую сборку мусора, поэтому кэш на ней никогда не теряет записи
- ✓SoftReference очищается по усмотрению JVM при нехватке памяти — отсюда её применение в кэшах
- ✓WeakReference очищается на ближайшей сборке, если на объект нет сильных ссылок — на этом построен WeakHashMap
- ✓PhantomReference всегда возвращает null из get() и служит для действий после того, как объект стал недостижим
Что спросят дальше
- Как WeakHashMap избегает утечки ключей?
- Зачем нужна ReferenceQueue?
Разбор темы
- GC: корни, достижимость и типы ссылок
GC roots и reachability, strong/soft/weak/phantom-ссылки, Cleaner вместо finalize и утечки через сильные ссылки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.