1

長い仕事をしているメソッドがある場合 (たとえば、Web サービス呼び出しを行う)、ガベージ コレクターはメソッドが使用するメモリを調べて、異なる世代に移動しますか、それとも終了するまでメソッドを無視しますか?その後、後のデータでメモリを収集しようとしますか?

Web サービスの呼び出しが行われている場合、GC がそれを調べ、時間がかかるため、ジェネレーション 1 とマークし、次にジェネレーション 2 とマークするという説明を聞きました。後の段階まで収集されません。これは正しいです?

4

3 に答える 3

0

GCが起動すると、オブジェクトのルートが調べられます。それらのルートがメソッド変数からのものか、インスタンス/静的フィールドからのものかは関係ありません。メソッドが終了するまでこれらの参照は有効であるため、メソッドから参照されているリソースは解放されません。

于 2013-02-08T11:53:44.247 に答える
0

メソッドは GC から直接見えません。

于 2013-09-09T01:55:30.303 に答える
-1

ガベージコレクターはメソッドを探しません。GCは参照をチェックします。

簡単な例:グローバル変数を定義すると、スコープのすべての関数からアクセスできます。スコープを離れるまで収集されません。ローカル変数を定義する場合、たとえば関数内で、この変数によって使用されるメモリは、関数が戻った後(またはfinally、try / catchブロックから戻った場合はブロック)にクリアされます。

于 2013-02-08T11:54:01.903 に答える