「こんにちは、アミーゴ!」
「ねえ、エリー。何か面白い話はある?」
「今日は、オブジェクトの存続期間とも呼ばれる、オブジェクトがメモリ内に留まる期間について話します。オブジェクトが作成された後、少なくとも 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 に設定するか、別のオブジェクトへの参照を割り当てることができます。」
GO TO FULL VERSION