Junior — Middle
Wann erfolgt die Bereinigung des Objekts, auf das sich WeakReference bezieht, während des Systembetriebs?
sobes.tech KI
Antwort von AI
Das Objekt, auf das sich WeakReference bezieht, wird zum Kandidaten für die Müllabfuhr, wenn keine starken Referenzen mehr darauf existieren. In diesem Moment kann der Müllsammler das Objekt löschen, auch wenn eine schwache Referenz vorhanden ist.
Das heißt, die Bereinigung des Objekts erfolgt während der Ausführung der Müllabfuhr, wenn:
- Es keine starken Referenzen auf das Objekt gibt.
- Es nur schwache Referenzen (
WeakReference) gibt, die die Müllabfuhr nicht verhindern.
Nach der Bereinigung des Objekts gibt WeakReference.get() null zurück.
Beispiel:
val strongRef = SomeObject()
val weakRef = WeakReference(strongRef)
// strongRef existiert, das Objekt wird nicht gesammelt
println(weakRef.get()) // SomeObject
// Starke Referenz entfernen
strongRef = null
// Nach der Müllabfuhr kann das Objekt gelöscht werden
System.gc()
println(weakRef.get()) // null, wenn das Objekt gesammelt wurde
Daher erfolgt die Bereinigung im Moment der Müllabfuhr, wenn das Objekt nicht durch starke Referenzen gehalten wird.