为什么这段代码会占用内存,而无法完全回收呢?
|
我有一个简单的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);
带有上述代码示例和ѭ1的HTML文件托管在我的本地服务器上,获取文件所用的时间不会超过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);
此改进允许不将回调的闭包链接到xhr
var。
没有找到相关结果
已邀请:
5 个回复
绊伦欧
那会泄漏。即使setInterval并没有做任何有意义的事情,它仍然可以访问\“ a \”,并且垃圾收集器将其视为可访问的。
眠皇
的内容,这将需要一些内存。除此之外,XHR本身可能还需要一些内存。不过,我认为这并不是什么大问题,因为无论如何似乎都可以回收内存。
秃拳割
靛新比比催
窝头菊