1

IE8でテストするコードは次のとおりです。

var stack = [];
function test() {
    var i = 0;
    while(i++ < 100000) {
        stack[i] = {a: "some string"};
        delete stack[i];
    };
}
test();

このスクリプトは、IE でわずかなメモリしか使用しません。Windows タスク マネージャーでは 29704K と表示されますが、次は次のとおりです。

var stack = [];
function test() {
    var i = 0;
    while(i++ < 100000) {
        stack[i] = {a: "some string"};
    };
    i = 0;
    while(i++ < 100000) {
        delete stack[i];
    }
}
test();

54860K メモリを使用します。他の方法でメモリを解放する理由または方法をさまよっています。

ご協力ありがとうございます。

4

1 に答える 1

0

システム レベルでブラウザの総メモリ使用量だけを見ている場合は、実際に使用されているメモリの量ではなく、ブラウザの最大メモリ使用量を見ている可能性があります。ブラウザで何かを解放したからといって、ブラウザがそのメモリを OS に返すわけではありません。そのメモリは、ブラウザで将来再利用できる可能性がありますが、OS にはまだ返されていません。

2 番目の例では、要素を削除する前に配列を完全に設定するため、最初の例よりもピーク時のメモリ使用量が多くなります。したがって、ピーク時の使用率が高いために、システム レベルでより多くのメモリ使用量が示されても驚くことではありません。これは、大量のメモリがまだ使用されていることを意味するのではなく、ブラウザがより高いピーク使用量に対処するためにシステムからより多くのメモリを要求する必要があり、ブラウザが現在使用されていないメモリを必ずしも返さなかったということです。 OS。そのメモリは、将来のメモリ要求に使用できるブラウザの空きメモリのプールにあるため、メモリ リークではありません。

于 2012-06-23T03:23:28.200 に答える