Sobes.tech
Назад к вопросам
Junior — Middle
67

Когда в процессе работы системы происходит очистка объекта, на который ссылается WeakReference?

Ответ от нейросети

sobes.tech AI

Объект, на который ссылается WeakReference, становится кандидатом на сборку мусора, когда на него больше нет сильных ссылок (strong references). В этот момент сборщик мусора может очистить объект, даже если на него есть слабая ссылка.

То есть, очистка объекта происходит во время выполнения сборки мусора, если:

  • Нет ни одной сильной ссылки на объект.
  • Есть только слабые ссылки (WeakReference), которые не препятствуют сборке мусора.

После очистки объекта WeakReference.get() вернёт null.

Пример:

val strongRef = SomeObject()
val weakRef = WeakReference(strongRef)

// strongRef существует, объект не будет собран
println(weakRef.get()) // SomeObject

// Убираем сильную ссылку
strongRef = null

// После сборки мусора объект может быть очищен
System.gc()
println(weakRef.get()) // null, если объект собран

Таким образом, очистка происходит в момент сборки мусора, если объект не удерживается сильными ссылками.