Проверяет знание механизмов управления памятью с помощью разных типов ссылок.
В JVM есть четыре типа ссылок: сильная (strong), мягкая (soft), слабая (weak) и фантомная (phantom). Сильные не участвуют в сборке мусора. Мягкие используются для кэшей, удаляются при нехватке памяти. Слабые — для карт-кэширования, удаляются при следующем gc независимо от памяти. Фантомные применяются для финализации и пост-удаления.
1. Strong Reference
Обычные переменные Java
Объект жив, пока на него есть сильные ссылки
2. SoftReference
SoftReference<T>
Сохраняются до нехватки памяти
Идеальны для кэшей, где можно сбросить данные при давлении
3. WeakReference
WeakReference<T>
Удаляются при следующем сборщике мусора
Полезны для кешей, когда не критично удерживать объект
4. PhantomReference
PhantomReference<T> + ReferenceQueue
Используются для пост-финализационных действий и управления нативными ресурсами
Пример кэша:
Map<Key, SoftReference<Value>> cache = new HashMap<>();Когда применять:
SoftReference — большие кэши, дружелюбные к памяти
WeakReference — слушатели, обратные указатели без удержания