8

オブジェクトを何も割り当てずに作成した場合、Javascript ガベージ コレクションはいつこのオブジェクトを収集しますか? 次に例を示します。

alert(new Date().getTime());

このようなガベージ コレクションを行わないと、メモリ リークが発生しますか?

for (var i = 0; i < 99999999; i++) {
    console.info(new Date().getTime());
}
4

4 に答える 4

7

スコープ内の誰も匿名オブジェクトを参照していない場合、次回 GC が実行されたときにガベージ コレクションが行われます。

したがって、Console.info の実行が終了すると、ガベージ コレクションが開始されます。それらを参照するようにスコープ内の変数を設定すると、それらは参照しません。

于 2012-05-07T19:41:23.227 に答える
4

ガベージコレクションの利点は、メモリがいつ回収されるかわからないことです。また、気にする必要もありません(あまりにも頻繁に発生しない限り)

この状況では、ランタイムは最終的にそれらのDateインスタンスを再利用する必要がありますが、実際に実行する速度を変更することはありません。また、これによってメモリリークが発生することはありません。

于 2012-05-07T19:35:40.060 に答える
4

JavaScript は GC (ガベージ コレクター) を自動的に実行して、使用されなくなった文字列、オブジェクト、配列、および関数によって占有されているメモリを再利用します。

ガベージ コレクションの重要な機能の 1 つは、メモリを再利用しても安全な時期をガベージ コレクタが判断できなければならないことです。明らかに、まだ使用されている値を再利用してはならず、到達できなくなった値のみを収集する必要があります。つまり、プログラム内の変数、オブジェクト プロパティ、または配列要素のいずれからも参照できない値です。

参考: こちら。

于 2012-05-07T19:45:14.240 に答える
1

これは JS garbare コレクションに関する参考資料です: http://www.scirra.com/blog/76/how-to-write-low-garbage-real-time-javascript

于 2012-05-07T19:52:52.457 に答える