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

Чем слабая ссылка (WeakReference) отличается от обычной?

JuniorJVM и сборка мусора
Ещё спрашивают так:
  • Какие типы ссылок есть в Java?
  • Что такое WeakHashMap?
  • Чем SoftReference отличается от WeakReference?
Коротко

Слабая ссылка позволяет обратиться к объекту, но не удерживает его от сборки: если обычных ссылок нет, объект соберут.

  • get() может вернуть null в любой момент — результат проверяют
  • WeakHashMap — запись исчезает, когда ключ больше никому не нужен

А ещё Ещё есть Soft (держится до нехватки памяти) и Phantom (для действий после сборки)

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

Подробно

Обычная (сильная) ссылка удерживает объект: пока она достижима, объект живёт. Пакет java.lang.ref даёт более слабые ссылки:

  • WeakReference — не мешает сборке: если на объект остались только слабые ссылки, при ближайшей сборке он будет удалён, а get() вернёт null;
  • SoftReference — сборщик удаляет такие объекты, только когда памяти не хватает. Исторически их использовали для кэшей, но поведение плохо предсказуемо — для кэша лучше библиотека с явными лимитами;
  • PhantomReference — объект уже недоступен, ссылка нужна, чтобы узнать о его сборке и освободить связанные ресурсы (Cleaner).

Где пригодится слабая ссылка: хранить дополнительные данные об объекте, не продлевая ему жизнь. WeakHashMap держит ключи слабо: когда объект- ключ больше никому не нужен, запись исчезает сама.

Правило работы: значение get() может стать null в любой момент, поэтому его сохраняют в локальную переменную и проверяют.

Пример

WeakReference<byte[]> ref = new WeakReference<>(new byte[1_000_000]);
byte[] data = ref.get();   // может быть null
if (data != null) {
    use(data);
}

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

  • WeakReference не удерживает объект.
  • Обязательная проверка на null.
  • Пример применения — WeakHashMap.
  • Soft и Phantom ссылки — плюс.

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

  • Использовать полученное значение без проверки на отсутствие.
  • Считать мягкие ссылки надёжным механизмом кэширования.

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

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Она не удерживает объект от сборки: если других, обычных ссылок нет, объект будет собран
  • ✗Она указывает на копию объекта, а не на оригинал
  • ✗Она автоматически восстанавливает объект после сборки
  • ✗Она работает только с объектами вне кучи

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

  • Чем мягкая ссылка отличается от слабой по моменту очистки?
  • Зачем нужны фантомные ссылки?

Разбор темы

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

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

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

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

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