为什么这段代码消耗内存并且没有完全回收?

Ole*_*gas 3 javascript garbage-collection xmlhttprequest

我有一个简单的JavaScript代码,在无限运行时消耗内存.内存消耗由Google Chrome内存分析器监控.

  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);
Run Code Online (Sandbox Code Playgroud)

带有上面代码示例的Html文件并json.txt托管在我的本地服务器上,获取文件的时间不超过500毫秒(总是大约7-10毫秒).

在很长一段时间内,内存图看起来就像那样 初始内存消耗图

编辑一小时工作后的同一个Chrome窗口 工作一小时后的图表

编辑 从长远来看(小时)并非所有内存都被回收,图形仍然在升序.我理解为什么内存被消耗,我不明白为什么它没有完全回收.

编辑 这是我如何减少内存泄漏

  var callback = function(){
      if(this.readyState == 4 && this.status == 200) {
          console.log(this.responseText);
      }
  } 

  setInterval(function(){
     var xhr = new XMLHttpRequest();
     xhr.open('GET', 'json.txt', true);
     xhr.onreadystatechange = callback;
     xhr.send('');
  }, 500);
Run Code Online (Sandbox Code Playgroud)

这种改进允许不将回调的闭包链接到xhrvar.

Joa*_*uer 6

对于你重复加载的内容json.txt,需要一些内存.除此之外,XHR本身也可能需要一些记忆.然而,我并不认为这是一个很大的问题,因为无论如何记忆似乎都被收回了.