В чем разница между Strong, Soft, Week и Fantom-ссылками

«В чем разница между Strong, Soft, Week и Fantom-ссылками» — вопрос из категории Управление памятью, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Strong — обычная ссылка, удерживает объект в памяти, пока существует.
Soft — удаляется GC при нехватке памяти, но до OOM. Подходит для кешей.
Weak — удаляется GC при следующем сборе мусора, даже если памяти достаточно. Используется для избежания утечек (например, в WeakReference для Context).
Phantom — не предотвращает удаление объекта, но позволяет узнать, что он удален (через ReferenceQueue). Используется для финализации.

Пример WeakReference:

val weakRef = WeakReference(someObject)
// GC может удалить someObject, если нет других ссылок