我一直在阅读很多关于 Javascript 中的闭包的内容。我来自更传统的(C、C++ 等)背景并了解调用堆栈等,但我在 Javascript 中的内存使用方面遇到了麻烦。这是我设置的(简化的)测试用例:
function updateLater(){
console.log('timer update');
var params = new Object();
for(var y=0; y<1000000; y++){
params[y] = {'test':y};
}
}
或者,我也尝试过使用闭包:
function updateLaterClosure(){
return (function(){
console.log('timer update');
var params = new Object()
for(var y=0; y<1000000; y++)
{
params[y] = {'test':y};
}
});
}
然后,我设置了一个间隔来运行该功能......
setInterval(updateLater, 5000); // or var c = updateLaterClosure(); setInterval(c,5000);
计时器第一次运行时,内存使用量从 50MB 跳到 75MB(根据 Chrome 的任务管理器)。第二次超过 100MB。偶尔它会回落一点,但绝不会低于 75MB。
自己检查一下:https ://local.phazm.com:4435/Streamified/extension/branches/lib/test.html
显然,params 没有被完全垃圾收集,因为第一次计时器调用的内存没有被释放......但是,它也没有在每次调用时增加 25MB 的内存,所以好像垃圾收集永远不会发生...似乎总是保留一个“参数”实例。我试过设置一个子关闭和其他东西......没有骰子。
然而,最令人不安的是内存使用量呈上升趋势。现在它可能“只是”75MB,但让它运行足够长的时间(一夜之间),它会达到500MB。
想法?
谢谢!