これは、少なくとも現在のバージョンの 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);
}
私はこの関数を非常に頻繁に実行し、System.totalMemory
(OS X アクティビティ モニターと同様に) Flash のメモリ使用量を監視するために使用しました。
function Main():void {
setInterval(tick, 10);
setInterval(display, 500);
}
public function display():void {
trace("Memory usage: " + System.totalMemory + "B.");
}
メモリ使用量は一時的に上昇しますが、ガベージ コレクタが飛び込むと元に戻ります。平均メモリ使用量は数分間安定していました。
各クロージャへの明示的な参照を保持するようにコードを変更したところ1、メモリ使用量は数分で数ギガバイトに達しました。ドキュメントが古くなっています。Flash は、 に渡されたクロージャへの参照を保持しませんsetTimeout
。(少なくとも OS X では、Windows でも同じだと思います。)
1配列を静的クラス var として作成し、それぞれを呼び出す前にpush
edしました。f
setTimeout