Sobes.tech
Junior — Middle

Care sunt diferențele dintre diferitele tipuri de referințe în Java și cum influențează colectarea gunoiului?

sobes.tech AI

Răspuns de la AI

În Java, există diferite tipuri de referințe care influențează comportamentul colectorului de gunoi (Garbage Collector):

  1. Referință Puternică (Strong Reference) — o referință obișnuită la un obiect. Atâta timp cât există referințe puternice, obiectul nu va fi șters de colectorul de gunoi.

  2. Referință Moale (Soft Reference) — un obiect cu referință moale este șters doar în caz de lipsă de memorie. Este folosit pentru caching.

  3. Referință Slabă (Weak Reference) — un obiect cu referință slabă poate fi șters în următoarea trecere a colectorului de gunoi, chiar dacă există referințe slabe.

  4. Referință Fantomă (Phantom Reference) — folosită pentru a urmări momentul în care un obiect este gata pentru ștergere, dar încă nu a fost șters. Permite efectuarea unor acțiuni suplimentare după ștergerea obiectului.

Exemplu de utilizare a unei referințe slabe:

import java.lang.ref.WeakReference;

public class WeakRefExample {
    public static void main(String[] args) {
        Object obj = new Object();
        WeakReference<Object> weakRef = new WeakReference<>(obj);

        obj = null; // Eliminăm referința puternică

        System.gc(); // Pornim colectorul de gunoi

        if (weakRef.get() == null) {
            System.out.println("Obiect șters");
        } else {
            System.out.println("Obiect încă disponibil");
        }
    }
}

Astfel, alegerea tipului de referință permite controlul duratei de viață a obiectelor și eficiența utilizării memoriei.