– Cześć, Amigo!

– Cześć, Basiu! Czy opowiesz mi o czymś ciekawym?

– Dzisiaj porozmawiamy o tym, jak długo obiekt jest przechowywany w pamięci, czyli jaki jest czas życia obiektu. Utworzony obiekt istnieje (żyje), dopóki przynajmniej jedna zmienna przechowuje jego adres (odnosi się do niego). Jeśli nie istnieją już żadne referencje do niego, obiekt umiera. Oto kilka przykładów:

public class MainClass
{
   public static void main (String[] args)
   {
    Pafnucy
     Kot kot = new Kot("Pafnucy");
     kot = null;
    
    Sajgon
     Kot kot1 = new Kot("Sajgon");
    Mania
    Kot kot2 = new Kot("Mania");;
    kot2 = kot1;
    
    Gacek
    kot1 = new Kot("Gacek");
    kot2 = null;
    
    
   }
}

– Obiekt Pafnucy istnieje tylko przez jedną linię od momentu jego utworzenia. Jedyna zmienna odnosząca się do obiektu przyjmuje wartość null zaraz w następnej linii, więc obiekt ten jest niszczony przez Wirtualną maszynę Java (JVM).

– Obiekt Sajgon po utworzeniu jest przechowywany w zmiennej kot1. A dokładniej – ta zmienna przechowuje referencję do niego. Kilka linii później ta referencja jest kopiowana do kot2. Następnie referencja do innego obiektu jest zapisywana w kot1. Teraz tylko kot2 odnosi się do Sajgon. Wreszcie ostatnia pozostała referencja do obiektu przyjmuje wartość null w ostatniej linii metody main.

– Obiekt Mania istnieje tylko przez jedną linię od momentu jego utworzenia. W następnej linii zmienna kot2 przyjmuje inną wartość, a referencja do Mania zostaje utracona. Nie można już uzyskać dostępu do tego obiektu i jest on uważany przez system za nieużytek (np. obiekt jest martwy).

– Obiekt Gacek istnieje od momentu jego utworzenia aż do końca metody. Na końcu metody zmienna kot2 zostaje zniszczona, a Gacek zaraz po niej.

– Rozumiem.

– Ale jeśli utworzymy obiekt Kot wewnątrz metody i umieścimy referencję do niego w zmiennej instancji, to obiekt Kot będzie istniał, dopóki będzie istniało odniesienie do niego w innym obiekcie, który nadal jest żywy.

– Tak naprawdę obiekt zazwyczaj nie jest niszczony przez system natychmiastowo. Wirtualna maszyna Java przeprowadza „odśmiecanie” od czasu do czasu, niszcząc te obiekty, które zostały zaznaczone do usunięcia. Więcej o tym procesie dowiesz się później.

– A jeśli nie chcemy już, by zmienna odnosiła się do obiektu, możemy przypisać jej wartość null albo przypisać jej referencję do innego obiektu.