Junior — Middle
Πότε γίνεται καθαρισμός του αντικειμένου στο οποίο αναφέρεται το WeakReference κατά τη διάρκεια της λειτουργίας του συστήματος;
sobes.tech AI
Απάντηση από AI
Το αντικείμενο στο οποίο αναφέρεται το WeakReference γίνεται υποψήφιο για συλλογή απορριμμάτων όταν δεν υπάρχουν πλέον ισχυρές αναφορές σε αυτό. Σε αυτήν τη στιγμή, ο συλλέκτης απορριμμάτων μπορεί να καθαρίσει το αντικείμενο, ακόμη και αν υπάρχει μια αδύναμη αναφορά.
Δηλαδή, η καθαριότητα του αντικειμένου συμβαίνει κατά την εκτέλεση της συλλογής απορριμμάτων, εάν:
- Δεν υπάρχει καμία ισχυρή αναφορά στο αντικείμενο.
- Υπάρχουν μόνο αδύναμες αναφορές (
WeakReference), που δεν εμποδίζουν τη συλλογή απορριμμάτων.
Μετά την καθαριότητα του αντικειμένου, το WeakReference.get() θα επιστρέψει null.
Παράδειγμα:
val strongRef = SomeObject()
val weakRef = WeakReference(strongRef)
// strongRef υπάρχει, το αντικείμενο δεν θα συλλεχθεί
println(weakRef.get()) // SomeObject
// Αφαιρούμε την ισχυρή αναφορά
strongRef = null
// Μετά τη συλλογή απορριμμάτων, το αντικείμενο μπορεί να καθαριστεί
System.gc()
println(weakRef.get()) // null, αν το αντικείμενο έχει συλλεχθεί
Έτσι, η καθαριότητα συμβαίνει τη στιγμή της συλλογής απορριμμάτων, εάν το αντικείμενο δεν διατηρείται από ισχυρές αναφορές.