Sobes.tech
Junior — Middle
84

Жүйеде WeakReference-ке сілтеме жасалған объектінің жиналу уақыты қашан?

AI-дан жауап

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, если объект собран

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