簡単な、一見、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をチェックします。

Source: https://habr.com/ru/post/J117909/


All Articles