1

试图看到并希望理解actionscript的垃圾收集器,我已经设置了一个示例项目,它在舞台上循环调试像素弯曲参数的值。了解Actionscript垃圾收集

我首先关心的是启动时使用的内存量(〜26 MB)。虽然我想通过尽可能地移除事件监听器并为垃圾收集清空无用的对象,我相信我对内存持谨慎态度,但我也相信我不完全掌握它在何处,为什么以及何时工作。

整个系统内存的跟踪显示从大约26 MB开始稳定上升,直到大约一分钟后(大约一分钟后)大约28 MB。突然它下降到25 MB,只能再次继续上涨。这似乎一遍又一遍地循环。

这里有一些想到的问题: 1.是否有垃圾收集器的一般时间延迟? 2.在分配了一定量的内存之后它会启动吗? 3.可以立即显式删除对象而不依赖垃圾收集器? 4.运行闪存时,内存使用情况的可接受范围是多少?

附上是我的代码。

import fl.transitions.*; 
import fl.transitions.easing.*; 

var shader:Shader; 
var shaderFilter:ShaderFilter; 
var motionTween:Tween; 
var filterParameter:Number = 0.0; 
var loader:URLLoader = new URLLoader(); 
var phase:Boolean = false; 

loader.dataFormat = URLLoaderDataFormat.BINARY; 
loader.addEventListener(Event.COMPLETE, dataLoaded); 
loader.load(new URLRequest("myBoringFilter.pbj")); 

function dataLoaded(e:Event):void 
{ 
loader.removeEventListener(Event.COMPLETE, dataLoaded); 
shader = new Shader(e.target.data); 
shaderFilter = new ShaderFilter(shader); 
flower.filters = [shaderFilter]; 

tweenLoop(null); 
} 

function tweenLoop(e:TweenEvent):void 
{ 
if (motionTween != null) 
    { 
    motionTween.removeEventListener(TweenEvent.MOTION_CHANGE, updateFilter); 
    motionTween.removeEventListener(TweenEvent.MOTION_FINISH, tweenLoop); 
    motionTween = null; 
    } 

phase = !phase; 

if (phase == true) 
    {motionTween = new Tween(this, "filterParameter", Regular.easeOut, filterParameter, 100.0, 2.0, true);} 
    else 
    {motionTween = new Tween(this, "filterParameter", Regular.easeOut, filterParameter, -100.0, 1.0, true);} 

motionTween.addEventListener(TweenEvent.MOTION_CHANGE, updateFilter); 
motionTween.addEventListener(TweenEvent.MOTION_FINISH, tweenLoop); 
} 

function updateFilter(e:TweenEvent):void 
{ 
shader.data.amount.value = [filterParameter]; 
flower.filters = [shaderFilter]; 

//Update Memory 
trace("System Total Memory: " + System.totalMemory); 
} 

回答