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.");
}