有人知道为什么这里的内存消耗保持不变吗?
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 方法执行时可用,然后再为 test 函数创建一个执行上下文等等。
此外,在每个执行中,我们都会创建一个 Uint16Array 的内存块,我相信它是在堆中分配的,并且由于从闭包中可以访问到,所以永远不会被释放。
内存概况:
查看内存时间轴,似乎随着时间的推移并没有增加内存分配。这是预期的行为吗?
uArr
只是一个本地变量,它的生命周期仅限于check()
函数的当前执行。一旦check()
的调用完成,该调用的局部变量就有资格进行垃圾回收,因为不再有可以访问它们的代码。在闭包中无限期存活的唯一变量是node
。 - jfriend00