Sobes.tech
Junior — Middle

Kedy počas chodu systému dochádza k vyčisteniu objektu, na ktorý odkazuje WeakReference?

sobes.tech AI

Odpoveď od AI

Objekt, na ktorý odkazuje WeakReference, sa stáva kandidátom na zber odpadu, keď na neho už nie sú žiadne silné odkazy (strong references). V tomto momente môže zberač odpadu objekt vyčistiť, aj keď existuje slabý odkaz.

To znamená, že čistenie objektu prebieha počas vykonávania zberu odpadu, ak:

  • Neexistuje žiadny silný odkaz na objekt.
  • Existujú iba slabé odkazy (WeakReference), ktoré nebránia zberu odpadu.

Po vyčistení objektu WeakReference.get() vráti null.

Príklad:

val strongRef = SomeObject()
val weakRef = WeakReference(strongRef)

// strongRef existuje, objekt nebude zbieraný
println(weakRef.get()) // SomeObject

// Odstránime silnú referenciu
strongRef = null

// Po zbere odpadu môže byť objekt vyčistený
System.gc()
println(weakRef.get()) // null, ak bol objekt zbieraný

Teda, čistenie prebieha v momente zberu odpadu, ak objekt nie je udržiavaný silnými odkazmi.