Junior — Middle
Жүйе иштеп чыгуу учурунда WeakReference менен шилтемеленген объектти тазалоо качан болот?
sobes.tech AI
AIден жооп
WeakReference менен шилтеме берилген объект, ага күчтүү шилтеме (strong reference) калбай калганда, калдык чогултууга талапкер болот. Ошол учурда, калдык чогултуучу ал объектти тазалай алат, эгер ал зымсыз шилтеме болсо да.
Демек, объектти тазалоо калдык чогултуу учурунда болот, эгер:
- Объектке күчтүү шилтеме калбаса.
- Жай гана зымсыз шилтемелер (
WeakReference) болсо жана алар калдык чогултууга тоскоолдук кылбаса.
Объект тазаланган соң, WeakReference.get() null кайтарат.
Мисал:
val strongRef = SomeObject()
val weakRef = WeakReference(strongRef)
// strongRef бар, объект чогулбайт
println(weakRef.get()) // SomeObject
// күчтүү шилтемени алып салабыз
strongRef = null
// Чогултуу аяктагандан кийин, объект тазаланышы мүмкүн
System.gc()
println(weakRef.get()) // null, эгер объект чогулуп калса
Ошентип, тазалоо калдык чогултуу учурунда, эгер объект күчтүү шилтемелер менен кармалбаса, болот.