В какой момент система освобождает WeakReference

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

Ответ

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

Пример:

val obj = Any()
val weakRef = WeakReference(obj)
// Пока есть сильная ссылка на obj, weakRef не очищается

// После этого GC может очистить weakRef
obj = null 
System.gc() // Подсказка GC, но не гарантия очистки