Sobes.tech
Junior — Middle

Кай вақт дар раванди коркарди системаи коркард кардани объекте, ки ба WeakReference ишора мекунад, рух медиҳад?

sobes.tech AI

Ҷавоб аз 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, агар объект йиғилган бўлса

Шу тариқа, тозалаш чиқиндиларни йиғиш вақтида, агар объект қувватли ҳаволалар билан ушлаб турилмаса, амалга ошади.