Ответ
WeakReference освобождается сборщиком мусора (GC) в любой момент, когда на объект нет других сильных ссылок. GC самостоятельно определяет оптимальное время для очистки, учитывая нехватку памяти или другие условия.
Пример:
val obj = Any()
val weakRef = WeakReference(obj)
// Пока есть сильная ссылка на obj, weakRef не очищается
// После этого GC может очистить weakRef
obj = null
System.gc() // Подсказка GC, но не гарантия очистки