"Hej, Amigo!"

"Hej, Ellie. Har du något intressant att berätta för mig?"

"Idag ska vi prata om hur länge ett objekt stannar i minnet, även känt som objektets livstid. Efter att ett objekt har skapats existerar (lever) det så länge som minst en variabel lagrar dess adress (det finns minst en referens till det). Om det inte finns fler referenser dör objektet. Här är några exempel:"

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;
    ┃┗
    ┗
   }
}

"Tommy-objektet existerar endast för en rad från dess skapelse. Den enda variabeln som refererar till objektet är satt till null på nästa rad, så objektet förstörs av Java Virtual Machine (JVM)."

"Sammy-objektet lagras i variabeln cat1 efter att det har skapats. Eller, rättare sagt, variabeln lagrar en referens till det. Ett par rader senare kopieras denna referens till cat2 . Sedan sparas en referens till ett annat objekt till cat1 . Nu refererar bara cat2 till Sammy . Slutligen är den sista återstående referensen till objektet inställd på null i den sista raden i huvudmetoden."

"Missy-objektet existerar bara för en rad efter att det skapats. På nästa rad sätts variabeln cat2 till ett annat värde och referensen till Missy går förlorad. Objektet kan inte längre nås, så det anses vara skräp av system (dvs objektet är dött)."

"När det har skapats existerar Ginger-objektet tills metoden slutar. I slutet av metoden förstörs variabeln cat2 , och Ginger förstörs direkt efter det."

"Jag förstår."

"Men om vi skapar ett Cat- objekt i en metod och lagrar en referens till det i en instansvariabel, kommer Cat -objektet att existera så länge som det refereras av ett annat objekt som fortfarande är vid liv."

"Egentligen förstörs ett objekt vanligtvis inte omedelbart av systemet. Java Virtual Machine utför "sopsamling" då och då och förstör objekt som har markerats för radering. Mer om den processen senare."

"Och om vi inte längre vill att en variabel ska referera till ett objekt kan vi ställa in den på null eller tilldela den en referens till ett annat objekt."