Junior — Middle
Kdy dochází k vyčištění objektu, na který odkazuje WeakReference, během chodu systému?
sobes.tech AI
Odpověď od AI
Objekt, na který odkazuje WeakReference, se stává kandidátem na sběr odpadu, když na něj již nejsou žádné silné odkazy (strong references). V tomto okamžiku může sběrač odpadu objekt vyčistit, i když na něj existuje slabý odkaz.
To znamená, že čištění objektu probíhá během provádění sběru odpadu, pokud:
- Neexistuje žádný silný odkaz na objekt.
- Existují pouze slabé odkazy (
WeakReference), které nebrání sběru odpadu.
Po vyčištění objektu WeakReference.get() vrátí null.
Příklad:
val strongRef = SomeObject()
val weakRef = WeakReference(strongRef)
// strongRef existuje, objekt nebude sbírán
println(weakRef.get()) // SomeObject
// Odstraníme silný odkaz
strongRef = null
// Po sběru odpadu může být objekt vyčištěn
System.gc()
println(weakRef.get()) // null, pokud byl objekt sbírán
Tedy, čištění probíhá v okamžiku sběru odpadu, pokud objekt není držen silnými odkazy.