"Olá, amigo!"

"Ei, Ellie. Você tem algo interessante para me dizer?"

"Hoje vamos falar sobre quanto tempo um objeto fica na memória, também conhecido como tempo de vida do objeto. Depois que um objeto é criado, ele existe (vive) desde que pelo menos uma variável esteja armazenando seu endereço (há pelo menos um referência a ele). Se não houver mais referências, o objeto morre. Aqui estão alguns exemplos:"

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

"O objeto Tommy existe apenas por uma linha desde sua criação. A única variável que faz referência ao objeto é definida como nula na linha seguinte, portanto, o objeto é destruído pela Java Virtual Machine (JVM)."

"O objeto Sammy é armazenado na variável cat1 após ser criado. Ou, mais precisamente, a variável armazena uma referência a ela. Algumas linhas depois, essa referência é copiada para cat2 . Em seguida, uma referência a outro objeto é salva em cat1 . Agora, apenas cat2 referencia Sammy . Finalmente, a última referência restante ao objeto é definida como nula na última linha do método principal."

"O objeto Missy existe apenas por uma linha após sua criação. Na linha seguinte, a variável cat2 é configurada para outro valor e a referência a Missy é perdida. O objeto não pode mais ser acessado, portanto é considerado lixo pelo sistema (ou seja, o objeto está morto)."

"Uma vez criado, o objeto Ginger existe até que o método termine. No final do método, a variável cat2 é destruída, com o Ginger sendo destruído imediatamente depois disso."

"Eu vejo."

"Mas se criarmos um objeto Cat dentro de um método e armazenarmos uma referência a ele em uma variável de instância, o objeto Cat existirá desde que seja referenciado por outro objeto que ainda esteja vivo."

"Na verdade, um objeto geralmente não é imediatamente destruído pelo sistema. A Java Virtual Machine realiza 'coleta de lixo' de tempos em tempos, destruindo objetos que foram marcados para exclusão. Mais sobre esse processo posteriormente."

"E, se não quisermos mais que uma variável faça referência a um objeto, podemos defini-la como null ou atribuir uma referência a outro objeto."