0

リンクをクリックするとデータが入力されるアプリケーションに静的マップがあります。その後、たくさんのオブジェクトを作成して保存します。これで、このマップをクリアするリンクができました。

これが私のコードです。

Hello1 hello1 = new Hello1();
hello1.setHello("Helllollo1");
Hello hello = new Hello();
hello.setHello1(hello1);
hello.setHello("Hellollo");
setMap("1", (Object)hello);

Hello1 hello2 = new Hello1();
hello2.setHello("Helllollo1");
Hello helo = new Hello();
helo.setHello1(hello2);
helo.setHello("Hellollo");
setMap("2", (Object)helo);

Hello1 hello3 = new Hello1();
hello2.setHello("Helllollo1");
Hello helo1 = new Hello();
helo1.setHello1(hello3);
helo1.setHello("Hellollo");
setMap("3", (Object)helo1); 

今、私は以下のように機能するメソッドremoveMapを持っています

public static void removeMap(String key){

        if(map.containsKey(key)){

            map.remove(key);
        }   
    }

上記の 3 つのオブジェクトを追加した後、単一のキーに対してこのメ​​ソッドを呼び出すと、そのオブジェクトはガベージ コレクションされますか?

4

3 に答える 3

2

はい、マップがクリアされた後、そこから参照されたオブジェクトは、それらへの強い参照が他にない場合、ガベージ コレクションの対象になります。

マップからエントリを削除しても、すぐにガベージ コレクションが発生するわけではないことに注意してください。これは、マップがオブジェクトのガベージ コレクションを妨げていないことを意味するだけです。

于 2012-07-02T07:07:30.047 に答える
0

あなたの質問は、用語の矛盾を具体化しています。オブジェクト、またはオブジェクトへの参照がマップから削除された場合、そのオブジェクトは「マップ内」ではなくなります。

于 2012-07-02T10:26:26.303 に答える
0

はい、Mapをクリアするか、オブジェクトを削除すると、オブジェクトはガベージコレクションの対象になります。オブジェクトには参照がないため、GCの対象になります。

到達不能または参照のないオブジェクトは、収集の対象となります。

于 2012-07-02T07:14:54.147 に答える