Sobes.tech
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.