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=nullreturnedRefreturnedRef
オブジェクトがガベージ コレクションの対象であっても、必ずしも GC によって破棄されるとは限りません。ガベージ コレクタがいつ実行されるかは、JVM に決定を委ねるのが最善です。