Junior — Middle
Millal toimub WeakReference'iga viidatud objekti puhastamine süsteemi töö ajal?
sobes.tech AI
Vastus AI-lt
Esmu atzīmējis, ka WeakReference norāda uz objektu, kas kļūst par kandidātu atkritumu savākšanai, kad tam vairs nav stipru atsauču (strong references). Šajā brīdī atkritumu savācējs var iztīrīt objektu, pat ja ir vājas atsauces.
Tas nozīmē, ka objekta tīrīšana notiek izpildes laikā, ja:
- Nav nevienas stipras atsauces uz objektu.
- Ir tikai vājas atsauces (
WeakReference), kas neaptur atkritumu savākšanu.
Pēc objekta tīrīšanas WeakReference.get() atgriezīs null.
Piemērs:
val strongRef = SomeObject()
val weakRef = WeakReference(strongRef)
// strongRef pastāv, objekts netiks savākts
println(weakRef.get()) // SomeObject
// Noņemam stipro atsauci
strongRef = null
// Pēc atkritumu savākšanas objekts var tikt notīrīts
System.gc()
println(weakRef.get()) // null, ja objekts ir savākts
Tādējādi, tīrīšana notiek atkritumu savākšanas laikā, ja objekts netiek turēts stiprās atsaucēs.