Sobes.tech
Junior — Middle

Kada se tokom rada sistema dešava čišćenje objekta na koji se odnosi WeakReference?

sobes.tech АИ

Одговор од АИ

Objekat na koji se odnosi WeakReference postaje kandidat za sakupljanje smeća kada na njega više nema jakih referenci. U tom trenutku, sakupljač smeća može očistiti objekat, čak i ako postoji slaba referenca.

To znači da se čišćenje objekta dešava tokom izvršavanja sakupljanja smeća, ako:

  • Nema jake reference na objekat.
  • Postoje samo slabe reference (WeakReference), koje ne sprečavaju sakupljanje smeća.

Nakon čišćenja objekta, WeakReference.get() će vratiti null.

Primer:

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

// strongRef postoji, objekat neće biti sakupljen
println(weakRef.get()) // SomeObject

// Uklanjamo jaku referencu
strongRef = null

// Nakon sakupljanja smeća, objekat može biti očišćen
System.gc()
println(weakRef.get()) // null, ako je objekat sakupljen

Dakle, čišćenje se dešava u trenutku sakupljanja smeća ako objekat nije zadržan jakim referencama.