– Szia Amigo!

"Hé, Ellie. Van valami érdekes mondanivalód?"

"Ma arról fogunk beszélni, hogy mennyi ideig marad egy objektum a memóriában, más néven az objektum élettartama. Egy objektum létrehozása után addig létezik (él), amíg legalább egy változó tárolja a címét (legalább egy van). hivatkozás rá). Ha nincs több hivatkozás, az objektum meghal. Íme néhány példa:"

public class MainClass
{
   public static void main (String[] args)
   {TommyCat cat = new Cat("Tommy");
    ┃ cat = null;
    ┗
    ┏ SammyCat cat1 = new Cat("Sammy");
    ┃┏ Missy
    ┃┃Cat cat2 = new Cat("Missy");
    ┃┃cat2 = cat1;
    ┃┗
    ┃┏ Ginger
    ┃┃cat1 = new Cat("Ginger");
    ┃┃cat2 = null;
    ┃┗
    ┗
   }
}

"A Tommy objektum csak egy sorra létezik a létrehozásától számítva. Az egyetlen változó, amely az objektumra hivatkozik, nullára van állítva a következő sorban, így az objektumot a Java Virtual Machine (JVM) megsemmisíti."

"A Sammy objektum létrehozása után a cat1 változóban tárolódik . Pontosabban, a változó tárol egy hivatkozást. Néhány sorral később ez a hivatkozás a cat2- be kerül . Ezután egy másik objektumra való hivatkozás mentésre kerül a cat1 . Most csak a cat2 hivatkozik Sammy-re . Végül az objektum utolsó fennmaradó hivatkozása nullára lesz állítva a fő metódus utolsó sorában."

"A Missy objektum csak egy sor erejéig létezik a létrehozása után. A következő sorban a cat2 változó egy másik értékre lesz állítva, és a Missy- re való hivatkozás elveszik. Az objektum már nem érhető el, ezért az objektum szemétnek tekinti rendszer (azaz az objektum halott).

"A létrehozást követően a Ginger objektum a metódus végéig létezik. A metódus végén a cat2 változó megsemmisül, a Ginger pedig azonnal megsemmisül."

"Látom."

"De ha létrehozunk egy Cat objektumot egy metóduson belül, és hivatkozást tárolunk rá egy példányváltozóban, akkor a Cat objektum mindaddig létezni fog, amíg egy másik, még élő objektum hivatkozik rá."

"Valójában egy objektumot általában nem semmisít meg azonnal a rendszer. A Java Virtual Machine időről időre "szemétgyűjtést" végez, megsemmisítve a törlésre megjelölt objektumokat. Erről a folyamatról bővebben később."

"És ha már nem akarjuk, hogy egy változó hivatkozzon egy objektumra, akkor nullára állíthatjuk , vagy hivatkozást rendelhetünk hozzá egy másik objektumhoz."