Получить доступ

Что верно про типы ссылок в Java?

MiddleJVM и сборка мусора
Коротко

Strong — не собирается, пока достижим. Soft — очищается при нехватке памяти (кэш, который не жалко). Weak — на ближайшей сборке, если нет сильных ссылок (WeakHashMap, метаданные). Phantom — get() всегда null, сигнал после финализации для очистки ресурсов (Cleaner).

  • ReferenceQueue — узнать, что объект собран
  • Soft-кэш непредсказуем — лучше Caffeine с явным размером
  • WeakHashMap слабо держит ключи, а не значения

А ещё Значение, ссылающееся на свой ключ, не даст WeakHashMap очистить запись

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Сила ссылки определяет, когда объект может быть освобождён. Практическая разница soft и weak именно в моменте: мягкая ссылка живёт, пока хватает памяти, и потому подходит для кэша, который не жалко потерять; слабая исчезает при первой же сборке, и на ней строят WeakHashMap и хранение метаданных, не удерживающее ключи. Фантомная не даёт доступа к объекту вовсе — её ставят в очередь ReferenceQueue, чтобы освободить внешние ресурсы уже после того, как объект стал недостижим. Важная оговорка: гарантий по soft-ссылкам спецификация не даёт, и опираться на них как на управляемый кэш рискованно.

Что хотят услышать

  • Момент очистки для каждого типа.
  • Применение каждого.

Частые ошибки

  • Считать SoftReference надёжным кэшем с предсказуемым поведением.
  • Пытаться получить объект через PhantomReference.get().

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓SoftReference очищается по усмотрению JVM при нехватке памяти — отсюда её применение в кэшах
  • ✓WeakReference очищается на ближайшей сборке, если на объект нет сильных ссылок — на этом построен WeakHashMap
  • ✓PhantomReference всегда возвращает null из get() и служит для действий после того, как объект стал недостижим
  • ✗SoftReference гарантированно переживает любую сборку мусора

Что спросят дальше

  • Как WeakHashMap избегает утечки ключей?
  • Зачем нужна ReferenceQueue?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем