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, агар объект йиғилган бўлса
Шу тариқа, тозалаш чиқиндиларни йиғиш вақтида, агар объект қувватли ҳаволалар билан ушлаб турилмаса, амалга ошади.