public void example1() {
byte[] bytes = new byte[100];
}
変数によって参照されるオブジェクトbytes
は、メソッドの完了後にガベージ コレクションの対象になります。example1()
これは、ローカル変数の形式で唯一のアクティブな参照がbytes
関数呼び出しスタックから削除されるためです。
public byte[] example2() {
byte[] bytes = new byte[100];
return bytes
}
ここで参照されるオブジェクトは、参照を返すためbytes
、メソッドの終了直後はガベージ コレクションの対象になりません。example2()
だから、あなたがこのようなものを持っていればbyte[] returnedRef = example2()
。次に、returnRef
ローカル メソッド変数bytes
が関数呼び出しスタックから削除された後でも、参照が変数によって保持されるようになりました。そのため、1)または 2)ifをローカル変数にすることによって保持されているその参照returnedRef
が切り離されるまで、定義されているメソッドの最後で、それはパージされ、オブジェクトはガベージ コレクションの対象になりません。returnedRef=null
returnedRef
returnedRef
オブジェクトがガベージ コレクションの対象であっても、必ずしも GC によって破棄されるとは限りません。ガベージ コレクタがいつ実行されるかは、JVM に決定を委ねるのが最善です。