В какой момент чистятся SoftReference

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

Ответ

SoftReference очищаются сборщиком мусора (GC) когда объект больше не имеет сильных ссылок и системе не хватает памяти. В отличие от WeakReference, GC может (но не обязан) оставить SoftReference, если памяти достаточно. Обычно очищаются перед выбросом OutOfMemoryError.

Пример:

val softRef = SoftReference(SomeHeavyObject())
// Пока есть память - softRef.get() вернет объект
// При нехватке памяти GC может очистить ссылку