В чем разница между всеми типами ссылок

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

Ответ

WeakReference — слабая ссылка, не препятствует сборке мусора. Используется для кешей, избегания утечек.
SoftReference — мягкая ссылка, удаляется только при нехватке памяти. Подходит для кеширования ресурсов.
StrongReference — обычная "сильная" ссылка, объект живет, пока есть хотя бы одна такая ссылка.
PhantomReference — "фантомная" ссылка, не дает доступа к объекту, но уведомляет о его финализации. Используется для контроля за сборкой мусора.

Пример:

val strongRef = Any() // Strong
val weakRef = WeakReference(strongRef)
val softRef = SoftReference(strongRef)
val phantomRef = PhantomReference(strongRef, ReferenceQueue())