1

, пытаясь увидеть и, надеюсь, понять сборщик мусора actioncript, я установил образец проекта, который петли-tweens значение параметра пикселя bender на сцене.Понимая сборник мусора Actionscript

моей первой заботой был объем памяти, который использовался при запуске (~ 26 МБ). в то время как мне нравится верить, что я осторожно отношусь к памяти, удаляя прослушиватели событий и максимально уменьшая бесполезные объекты для мусорной коллекции, я также считаю, что я не полностью понимаю, где, почему и когда это работает.

След общей системной памяти показал устойчивый подъем, начиная примерно с 26 МБ до примерно 28 МБ примерно через минуту (или около того). внезапно он упал до 25 МБ только для продолжения роста еще раз. это, кажется, цикл снова и снова.

вот некоторые вопросы, которые приходят на ум: 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); 
} 

ответ

Смежные вопросы