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