JavaScript内存泄漏setTimeout问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript内存泄漏setTimeout问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1132字,纯文字阅读大概需要2分钟。
内容图文
![JavaScript内存泄漏setTimeout问题](/upload/InfoBanner/zyjiaocheng/946/8fa4a92282884095b4eed025868d5b12.jpg)
有谁知道为什么内存消耗在这里保持不变?
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”方法在其定义内调用自身,因此闭包变量将对内部check方法执行可用,然后再次为测试函数创建执行上下文,依此类推.
另外,在每次执行中,我们都会创建一个Uint16Array内存块,我相信它会在堆中分配,并且永远不要取消分配,因为它可以从闭包中获取.
内存配置文件:
从内存时间轴来看,随着时间的增加,内存分配似乎并没有增加.这是预期的行为吗?
解决方法:
uArr只是一个局部变量,它会在check()退出后进行分配,使用和垃圾回收.并且check()内部没有闭包. setTimeout()由check()调用(但未定义).
This page on Closures可能会有所帮助.
的确,如果有N次对check()的调用,那么将创建N个闭包(以及N个节点的副本),setTimeout()将在调用它后释放对check()的引用.因此,那里也没有泄漏.
内容总结
以上是互联网集市为您收集整理的JavaScript内存泄漏setTimeout问题全部内容,希望文章能够帮你解决JavaScript内存泄漏setTimeout问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。