Actionscript 3 如果未调用clearTimeout(),flash.utils.setTimeout()是否会泄漏内存?
索赔: 如果不调用Actionscript 3 如果未调用clearTimeout(),flash.utils.setTimeout()是否会泄漏内存?,actionscript-3,flash,Actionscript 3,Flash,索赔: 如果不调用clearTimeout()函数来取消setTimeout()调用,则包含set timeout closure函数的对象将不会被垃圾收集 这听起来很可笑。没有理由认为它应该持有对一个永远不会调用的函数/闭包的引用,并且 这是真的吗?这不是真的,至少在当前版本的Flash中是这样 我创建了一个函数,它创建一个大字符串,创建一个引用它的闭包,然后用闭包调用setTimeout public function tick():void { var data:String =
clearTimeout()
函数来取消setTimeout()
调用,则包含set timeout closure函数的对象将不会被垃圾收集
这听起来很可笑。没有理由认为它应该持有对一个永远不会调用的函数/闭包的引用,并且
这是真的吗?这不是真的,至少在当前版本的Flash中是这样 我创建了一个函数,它创建一个大字符串,创建一个引用它的闭包,然后用闭包调用
setTimeout
public function tick():void {
var data:String = "helloworld";
for (var j = 0; j < 20; j++) {
data += data;
}
var f = function() {
var i = 0;
if (data.length > 0) {
i++;
}
};
setTimeout(f, 0);
}
内存使用率会短暂上升,但随着垃圾收集器的加入,内存使用率会下降。平均内存使用率在几分钟内保持稳定
当我修改代码以保留对每个closure1的显式引用时,内存使用量在几分钟内上升到了很多GB。文件已经过时了。Flash不保留对传递给setTimeout
的闭包的引用。(至少在OSX上是这样;我想在Windows上也是如此。)
1我创建了一个数组作为静态类变量,并在调用setTimeout
之前将每个f
推送到它上面
function Main():void {
setInterval(tick, 10);
setInterval(display, 500);
}
public function display():void {
trace("Memory usage: " + System.totalMemory + "B.");
}