Sobes.tech
Junior — Middle

Când are loc curățarea obiectului la care face referire WeakReference în timpul funcționării sistemului?

sobes.tech AI

Răspuns de la AI

Obiectul la care face referire WeakReference devine candidat pentru colectarea gunoiului atunci când nu mai există referințe puternice către el. În acel moment, colectorul de gunoi poate curăța obiectul, chiar dacă există o referință slabă.

Adică, curățarea obiectului are loc în timpul execuției colectării gunoiului dacă:

  • Nu există nicio referință puternică către obiect.
  • Există doar referințe slabe (WeakReference), care nu împiedică colectarea gunoiului.

După curățarea obiectului, WeakReference.get() va returna null.

Exemplu:

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

// strongRef există, obiectul nu va fi colectat
println(weakRef.get()) // SomeObject

// Eliminăm referința puternică
strongRef = null

// După colectarea gunoiului, obiectul poate fi curățat
System.gc()
println(weakRef.get()) // null, dacă obiectul a fost colectat

Prin urmare, curățarea are loc în momentul colectării gunoiului dacă obiectul nu este menținut de referințe puternice.