【发布时间】:2012-12-11 15:05:54
【问题描述】:
目前正在开发一个基于 JavaScript 的动画项目。
我注意到,正确使用setInterval()、setTimeout() 甚至requestAnimationFrame 会在没有我请求的情况下分配内存,并导致频繁的垃圾回收调用。更多 GC 调用 = 闪烁 :-(
例如;当我通过在 Google Chrome 中调用 init() 来执行以下 简单代码 时,内存分配 + 垃圾收集在前 20-30 秒内就可以了...
function init()
{
var ref = window.setInterval(function() { draw(); }, 50);
}
function draw()
{
return true
}
不知何故,在一分钟左右的时间内,分配的内存开始出现奇怪的增加!由于 init() 只被调用一次,分配的内存大小增加的原因是什么?
(编辑:已上传 chrome 截图)
注意 #1:是的,我尝试在下一个 setInterval() 之前调用 clearInterval()。问题依旧!
注意 #2:为了隔离问题,我保持上面的代码简单而愚蠢。
【问题讨论】:
-
你如何在 chrome 中检查“内存分配 + 垃圾回收”?
-
@chovy 设置->工具->任务管理器?但这并没有显示垃圾收集。
-
开发者工具 > 时间线 > 内存 > 记录
-
我很想知道如果你刚刚做了
setInterval(draw, 50);是否会遇到问题,也许与匿名函数的紧密间隔和范围建立/拆除有关?我本来以为 Chrome 会缓存该功能。 -
在 chrome 23 和 26 上确认
标签: javascript memory-leaks setinterval