Чем слабая ссылка (WeakReference) отличается от обычной?
- Какие типы ссылок есть в Java?
- Что такое WeakHashMap?
- Чем SoftReference отличается от WeakReference?
Слабая ссылка позволяет обратиться к объекту, но не удерживает его от сборки: если обычных ссылок нет, объект соберут.
- get() может вернуть null в любой момент — результат проверяют
- WeakHashMap — запись исчезает, когда ключ больше никому не нужен
А ещё Ещё есть Soft (держится до нехватки памяти) и Phantom (для действий после сборки)
Подробно
Обычная (сильная) ссылка удерживает объект: пока она достижима, объект живёт. Пакет 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 ссылки — плюс.
Частые ошибки
- Использовать полученное значение без проверки на отсутствие.
- Считать мягкие ссылки надёжным механизмом кэширования.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Она указывает на копию объекта, а не на оригинал
- ✓Она не мешает сборщику удалить объект
- ✗Она автоматически восстанавливает объект после сборки
- ✗Она работает только с объектами вне кучи
Что спросят дальше
- Чем мягкая ссылка отличается от слабой по моменту очистки?
- Зачем нужны фантомные ссылки?
Разбор темы
- GC: корни, достижимость и типы ссылок
GC roots и reachability, strong/soft/weak/phantom-ссылки, Cleaner вместо finalize и утечки через сильные ссылки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.