Sobes.tech
Junior — Middle

Μπορείς να απαριθμήσεις τους τύπους αναφορών που υπάρχουν στη Java και τα χαρακτηριστικά τους;

sobes.tech AI

Απάντηση από AI

Στη Java, υπάρχουν οι ακόλουθοι τύποι αναφορών που επηρεάζουν τη συλλογή απορριμμάτων και τη διαχείριση μνήμης:

  1. Ισχυρή Αναφορά (Strong Reference)

    • Η τυπική αναφορά που χρησιμοποιούμε από προεπιλογή.
    • Ένα αντικείμενο με ισχυρή αναφορά δεν θα διαγραφεί από τον συλλέκτη απορριμμάτων.
  2. Μαλακή Αναφορά (Soft Reference)

    • Χρησιμοποιείται για caching.
    • Τα αντικείμενα με μαλακές αναφορές διαγράφονται μόνο σε περίπτωση έλλειψης μνήμης.
    • Κλάση: java.lang.ref.SoftReference
  3. Αδύναμη Αναφορά (Weak Reference)

    • Τα αντικείμενα με αδύναμες αναφορές διαγράφονται στον επόμενο κύκλο συλλογής απορριμμάτων, αν δεν υπάρχουν ισχυρές αναφορές.
    • Χρησιμοποιείται για την υλοποίηση αδύναμων cache.
    • Κλάση: java.lang.ref.WeakReference
  4. Φανταστική Αναφορά (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 αν το αντικείμενο έχει ήδη συλλεχθεί