我有一个简单的 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);
包含上述代码示例和 json.txt
的 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。
最佳答案
对于一个你重复加载json.txt
的内容,这将需要一些内存。除此之外,XHR 本身可能也需要一些内存。不过,我认为这不是什么大问题,因为内存似乎无论如何都会被回收。
关于javascript - 为什么这段代码正在消耗内存并且没有被完全回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5659645/