[英]Javascript memory leak setTimeout issue
有没有人知道为什么内存消耗在这里保持不变?
var count = 0;
$(init);
function init(){
var node = document.querySelector('.logs');
function check(){
var uArr = new Uint16Array(100);
log(node, uArr.length);
setTimeout(check,100);
}
setTimeout(check,100);
}
function log(node, text){
if( count % 30 == 0 ){
node.innerHTML = '';
}
var child = document.createElement('div');
child.innerText = 'count ' + (count++) + " arr len " + text;
node.appendChild(child);
}
它应该线性增加内存分配的原因是:'check'方法在其定义中调用自身,因此闭包变量将可用于内部检查方法执行,然后再次为测试函数创建执行上下文,依此类推。
此外,在每次执行中,我们都会创建一个Uint16Array的内存块,我相信它是在堆中分配的,并且永远不应该从解析中获取,因为它可以从闭包中访问。
记忆简介:
查看内存时间轴,随着时间的增加,它似乎不会增加内存分配。 这是预期的行为吗?
uArr
只是一个局部变量,在check()
退出后分配,使用,然后进行垃圾收集。 并且check()
内没有闭包。 check()
调用setTimeout()
(但未定义check()
。
关闭此页面可能对您有所帮助。
虽然确实如果有N个调用check()
,就会创建N个闭包(以及N个node
副本), setTimeout()
会在调用后释放对check()
引用。 因此,那里也没有泄漏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.