Sobes.tech
Junior — Middle

Mikor történik a WeakReference által hivatkozott objektum tisztítása a rendszer működése közben?

sobes.tech MI

Válasz az MI-től

A WeakReference által hivatkozott objektum akkor válik szemétgyűjtésre jelöltté, amikor már nincs rá erős hivatkozás (strong reference). Ebben a pillanatban a szemétgyűjtő akár meg is tisztíthatja az objektumot, még akkor is, ha van gyenge hivatkozás.

Vagyis az objektum tisztítása a szemétgyűjtés során történik, ha:

  • Nincs erős hivatkozás az objektumra.
  • Csak gyenge hivatkozások (WeakReference) vannak, amelyek nem akadályozzák a szemétgyűjtést.

Az objektum tisztítása után a WeakReference.get() null értéket ad vissza.

Példa:

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

// strongRef létezik, az objektum nem lesz összegyűjtve
println(weakRef.get()) // SomeObject

// Erős hivatkozás eltávolítása
strongRef = null

// A szemétgyűjtés után az objektum tisztítható
System.gc()
println(weakRef.get()) // null, ha az objektum összegyűjtésre került

Így a tisztítás a szemétgyűjtés pillanatában történik, ha az objektumot nem tartják erős hivatkozások.