「こんにちは、アミーゴ!」

「ねえ、エリー。何か面白い話はある?」

「今日は、オブジェクトの存続期間とも呼ばれる、オブジェクトがメモリ内に留まる期間について話します。オブジェクトが作成された後、少なくとも 1 つの変数がそのアドレスを格納している限り、そのオブジェクトは存在します (存続します)。それへの参照)。参照がなくなると、オブジェクトは消滅します。いくつかの例を次に示します。」

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

「Tommy オブジェクトは、作成されてから 1 行だけ存在します。オブジェクトを参照する唯一の変数が次の行で null に設定されるため、オブジェクトは Java 仮想マシン (JVM) によって破棄されます。」

"Sammy オブジェクトは、作成後にcat1変数に保存されます。より正確には、変数はそのオブジェクトへの参照を保存します。数行後、この参照はcat2にコピーされます。その後、別のオブジェクトへの参照が次の場所に保存されます。cat1。現在、cat2のみがSammyを参照しています。最後に、メイン メソッドの最後の行で、オブジェクトへの最後に残っている参照が null に設定されます。

「Missy オブジェクトは、作成後 1 行だけ存在します。次の行では、cat2変数が別の値に設定され、 Missyへの参照が失われます。このオブジェクトにはアクセスできなくなるため、オブジェクトはガベージとみなされます。システムです (つまり、オブジェクトが死んでいます)。」

「Ginger オブジェクトは、一度作成されると、メソッドが終了するまで存在します。メソッドの終了時に、cat2変数が破棄され、その直後に Ginger が破棄されます。」

"そうか。"

「しかし、メソッド内でCatオブジェクトを作成し、それへの参照をインスタンス変数に保存すると、まだ生きている別のオブジェクトによって参照されている限り、Catオブジェクトは存在し続けます。」

「実際には、通常、オブジェクトはシステムによってすぐには破棄されません。Java 仮想マシンは時々「ガベージ コレクション」を実行し、削除対象としてマークされたオブジェクトを破棄します。そのプロセスについては後で詳しく説明します。

「そして、変数がオブジェクトを参照する必要がなくなった場合は、変数を null に設定するか、別のオブジェクトへの参照を割り当てることができます。」