簡単な、一見、JavaScriptに関する質問

シンプルに見えるコードがあります:



setInterval(function(){ var xhr = new XMLHttpRequest(); xhr.open('GET', 'json.txt', true); xhr.onreadystatechange = function() { if(this.readyState == 4 && this.status == 200) { console.log(this.responseText); } }; xhr.send(''); }, 500);
      
      







たとえば、Google Chormeのように、このコードを1時間動作させたままにすると、メモリが消費されます。 整然と食べる。 Developer Toolsのメモリ使用量プロファイルを見ると、メモリはまだGCによってクリーンアップされているが、完全にはクリーンアップされていないことがわかります。 時間が経つにつれて、GCが大きくなった後のグラフ上の最小ポイント。



画像



同様に、メモリ消費の増加は、「メモリ」について見ることができます。 メモリの「肥満」はFFで安定して見えます...



重要な...





このコードに加えて、このページにはまったくコードがありません。



GCがJSでどのように機能するか理解できないかもしれませんが、私の意見では、流れるものも永遠に生きるものもありません。 誰かが理由を説明できますか?



PS「実際の」リークはまだありません。ページを更新すると、メモリはクリアされます。

PPS 1時間よりもはるかに長い間隔で構造が似たコードを残すというローカルの重要なニーズ(「ビジネス要件」)があります。



UPD:クロムにもチケットがあります: code.google.com/p/chromium/issues/detail?id=52411

UPD: 9で修正されたと言われていますが、10をチェックします。



All Articles