繁体   English   中英

Javascript内存泄漏setTimeout问题

[英]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);
}

http://jsfiddle.net/V99Eb/11/

它应该线性增加内存分配的原因是:'check'方法在其定义中调用自身,因此闭包变量将可用于内部检查方法执行,然后再次为测试函数创建执行上下文,依此类推。

此外,在每次执行中,我们都会创建一个Uint16Array的内存块,我相信它是在堆中分配的,并且永远不应该从解析中获取,因为它可以从闭包中访问。

记忆简介: 在此输入图像描述

查看内存时间轴,随着时间的增加,它似乎不会增加内存分配。 这是预期的行为吗?

uArr只是一个局部变量,在check()退出后分配,使用,然后进行垃圾收集。 并且check()内没有闭包。 check()调用setTimeout() (但未定义check()

关闭此页面可能对您有所帮助。

虽然确实如果有N个调用check() ,就会创建N个闭包(以及N个node副本), setTimeout()会在调用后释放对check()引用。 因此,那里也没有泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM