0

ここで、ガベージコレクションに関してJavaに疑問があります。

protected class Robocop {
Integer weight = 200;

Robocop attent(Robocop rb) {
rb = null;
return rb;
}
public static void main(String[] args) {
System.out.println("indeed the solution is behind the corner);

Robocop rb1 = new Robocop();

Robocop rb2 = new Robocop();

Robocop rb3 = rb1.attent(rb2);

rb1 = null;

}
}

GCの対象となるオブジェクトはいくつあると思いますか?

これについての私の見解は、ガベージコレクションされる4つのオブジェクト、rb3、rb1、および関連する整数ラッパーインスタンス変数です。

4

2 に答える 2

2

nullメソッド内では、元の参照自体ではなく、メソッドへの引数として参照のコピーを取得するため、単に戻ることもできます。したがって、メソッド内で元の参照を変更することはできません。この参照が参照するオブジェクトのみを変更できます。

メインの最後で、2つのオブジェクトがGCの対象になります。1つRobocop(1つIntegerは内部)です。

mainが終了すると、JVMは(あなたの場合)シャットダウンするだけで、GCは発生しません。

于 2013-02-05T15:26:57.503 に答える
0

いつでもオブジェクトの正確な数を表示できるプロファイラーで試してみるのがおそらく最善です。コードにタイプミスがあるようです。これがあなたの意図したことRobocop rb3 = rb1.attent(r2); であると仮定すると、rb2はGCに適格であり、次にrb1もnullを指しているため、適格になります。
したがって、答えは2です。

于 2013-02-05T15:29:36.733 に答える