„Hi, Amigo!“

„Hey, Ellie. Hast du mir etwas Interessantes zu erzählen?“

„Heute sprechen wir darüber, wie lange ein Objekt im Speicher bleibt, auch bekannt als die Lebensdauer des Objekts. Nachdem ein Objekt erzeugt wurde, existiert es (lebt), solange mindestens eine Variable seine Adresse speichert (es gibt also mindestens eine Referenz darauf). Wenn es keine Referenzen mehr gibt, stirbt das Objekt. Hier ein paar Beispiele:“

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

„Das Tommy-Objekt existiert nur eine Zeile lang ab seiner Erstellung. Die einzige Variable, die auf das Objekt verweist, wird in der nächsten Zeile auf null gesetzt, so dass das Objekt von der Java Virtual Machine (JVM) zerstört wird.“

„Das Sammy-Objekt wird nach der Erstellung in der Variable katze1 gespeichert. Genauer gesagt: die Variable speichert eine Referenz darauf. Ein paar Zeilen später wird diese Referenz zu katze2 kopiert. Dann wird eine Referenz auf ein anderes Objekt in katze1 gespeichert. Jetzt verweist nur katze2 auf Sammy. Schließlich wird in der letzten Zeile der main-Methode die letzte verbleibende Referenz auf das Objekt auf null gesetzt.“

„Das Missy-Objekt existiert nur eine Zeile lang ab seiner Erstellung. In der nächsten Zeile wird die Variable katze2 auf einen anderen Wert gesetzt, und die Referenz auf Missy geht verloren. Auf das Objekt kann nicht mehr zugegriffen werden, so dass es vom System als Garbage (Müll) betrachtet wird (d.h. das Objekt ist tot).“

„Sobald es erstellt wurde, existiert das Ginger-Objekt bis zum Ende der Methode. Am Ende der Methode wird die Variable katze2 zerstört. Ginger wird sofort danach zerstört.“

„Ach so.“

„Aber wenn wir ein Katze-Objekt innerhalb einer Methode erstellen und eine Referenz darauf in einer Instanzvariablen speichern, dann existiert das Katze-Objekt, solange es von einem anderen noch lebenden Objekt referenziert wird.“

„Tatsächlich wird ein Objekt normalerweise nicht sofort vom System zerstört. Die Java Virtual Machine führt von Zeit zu Zeit eine sogenannte ‚Garbage Collection‘ durch und zerstört Objekte, die zum Löschen markiert wurden. Mehr zu diesem Prozess später.“

„Wenn wir nicht wollen, dass eine Variable weiterhin auf ein Objekt verweist, können wir es auf null setzen oder ihr eine Referenz auf ein anderes Objekt zuweisen.“