"Ciao, Amico!"

"Ehi, Ellie. Hai qualcosa di interessante da dirmi?"

"Oggi parleremo di quanto tempo un oggetto rimane in memoria, noto anche come durata dell'oggetto. Dopo che un oggetto è stato creato, esiste (vive) finché almeno una variabile memorizza il suo indirizzo (c'è almeno un riferimento ad esso). Se non ci sono più riferimenti, l'oggetto muore. Ecco alcuni esempi:"

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

"L'oggetto Tommy esiste solo per una riga dalla sua creazione. L'unica variabile che fa riferimento all'oggetto è impostata su null nella riga successiva, quindi l'oggetto viene distrutto dalla Java Virtual Machine (JVM)."

"L'oggetto Sammy viene memorizzato nella variabile cat1 dopo che è stato creato. O, più precisamente, la variabile memorizza un riferimento ad essa. Un paio di righe dopo, questo riferimento viene copiato in cat2 . Quindi viene salvato un riferimento a un altro oggetto in cat1 . Ora, solo cat2 fa riferimento a Sammy . Infine, l'ultimo riferimento all'oggetto rimanente è impostato su null nell'ultima riga del metodo main."

"L'oggetto Missy esiste solo per una riga dopo la sua creazione. Nella riga successiva, la variabile cat2 viene impostata su un altro valore e il riferimento a Missy viene perso. Non è più possibile accedere all'oggetto, quindi è considerato spazzatura dal sistema (cioè l'oggetto è morto)."

"Una volta creato, l'oggetto Ginger esiste fino al termine del metodo. Alla fine del metodo, la variabile cat2 viene distrutta, con Ginger che viene distrutto subito dopo."

"Vedo."

"Ma se creiamo un oggetto Cat all'interno di un metodo e memorizziamo un riferimento ad esso in una variabile di istanza, allora l' oggetto Cat esisterà fintanto che viene referenziato da un altro oggetto che è ancora vivo."

"In realtà, un oggetto di solito non viene immediatamente distrutto dal sistema. La Java Virtual Machine esegue di tanto in tanto la 'raccolta dei rifiuti', distruggendo gli oggetti che sono stati contrassegnati per l'eliminazione. Maggiori informazioni su questo processo più avanti."

"E, se non vogliamo più che una variabile faccia riferimento a un oggetto, possiamo impostarla su null o assegnarle un riferimento a un altro oggetto."