Junior — Middle
Μπορείς να απαριθμήσεις τους τύπους αναφορών που υπάρχουν στη Java και τα χαρακτηριστικά τους;
sobes.tech AI
Απάντηση από AI
Στη Java, υπάρχουν οι ακόλουθοι τύποι αναφορών που επηρεάζουν τη συλλογή απορριμμάτων και τη διαχείριση μνήμης:
-
Ισχυρή Αναφορά (Strong Reference)
- Η τυπική αναφορά που χρησιμοποιούμε από προεπιλογή.
- Ένα αντικείμενο με ισχυρή αναφορά δεν θα διαγραφεί από τον συλλέκτη απορριμμάτων.
-
Μαλακή Αναφορά (Soft Reference)
- Χρησιμοποιείται για caching.
- Τα αντικείμενα με μαλακές αναφορές διαγράφονται μόνο σε περίπτωση έλλειψης μνήμης.
- Κλάση:
java.lang.ref.SoftReference
-
Αδύναμη Αναφορά (Weak Reference)
- Τα αντικείμενα με αδύναμες αναφορές διαγράφονται στον επόμενο κύκλο συλλογής απορριμμάτων, αν δεν υπάρχουν ισχυρές αναφορές.
- Χρησιμοποιείται για την υλοποίηση αδύναμων cache.
- Κλάση:
java.lang.ref.WeakReference
-
Φανταστική Αναφορά (Phantom Reference)
- Χρησιμοποιείται για την παρακολούθηση της στιγμής που ένα αντικείμενο είναι έτοιμο για διαγραφή.
- Δεν επιτρέπει την απόκτηση του αντικειμένου μέσω της μεθόδου
get()(επιστρέφει null). - Χρησιμοποιείται για πιο λεπτομερή έλεγχο καθαρισμού πόρων.
- Κλάση:
java.lang.ref.PhantomReference
Παράδειγμα δημιουργίας αδύναμης αναφοράς:
import java.lang.ref.WeakReference;
String ισχυρός = new String("Hello");
WeakReference<String> αδύναμος = new WeakReference<>(ισχυρός);
ισχυρός = null; // τώρα το αντικείμενο είναι προσβάσιμο μόνο μέσω της αδύναμης αναφοράς
String τιμή = αδύναμος.get(); // μπορεί να επιστρέψει null αν το αντικείμενο έχει ήδη συλλεχθεί