0

SCJP第3章に質問があります。
次のコードを参照してください。

public class Sample_1 {


    Short story = 200;

    Sample_1 go(Sample_1 sample){
        sample = null;
        return sample;
    }

    public static void main(String a[]){
        Sample_1 sample1 =new  Sample_1();
        Sample_1 sample2 =new  Sample_1();
        Sample_1 sample3 = sample1.go(sample2);

        sample1 = null;

        //DO STUFF

    }

}

質問: GC @ line に適格なオブジェクトはいくつあります//DO STUFFか?

オプション:
0
1
2
コンパイルが失敗
する 知ることはできません
実行時に例外がスローされます

Book によると: 正しい ansert は 2 です。「Sample_1 オブジェクト (sample1) の 1 つだけが GC の対象となりますが、Short 値が関連付けられているため、GC の対象となるオブジェクトが 2 つあります」と書かれています。

この答えはまだ理解できません。すでに sample1 オブジェクトを null にしています。私の見解では、GC のオブジェクトはありません。

何か案が?

4

3 に答える 3

1

sample1はnullであるため、sample1に割り当てられたメモリとそれに含まれるShort変数は、ガベージコレクションの対象となります。

于 2012-05-22T17:59:27.013 に答える
0

この答えはまだ理解できません。すでに sample1 オブジェクトを null にしています。私の見解では、GC のオブジェクトはありません。

変数を null に設定しても、それが GC されるという意味ではなく、GC される資格があるという意味です。GC がいつ実行されるかをプログラムで制御することはできません。

于 2012-05-22T19:07:04.230 に答える
0

解決策を見つけました.. ここに ... 3 つのオブジェクト sample1、sample2、sample3 があります。

sample3 は null なので、GV する必要はありません。つまり、プログラム全体で初期化されていません。sample2 は最後のステートメントまで使用されているため、JVM はそれを GV できません。

そして、sample1 を null にしています。そのため、GV キューに追加されます。また、sample1 自体に Short オブジェクトがあります。したがって、GV の準備ができている 2 つのオブジェクトがあります。

ありがとう、グンジャン。

于 2012-05-23T09:13:51.163 に答える