2010-11-22 24 views
0

PopUpManager.addPopUp()で表示しているTitleWindowコンポーネントがあります。私はコンポーネントを閉じると、次のように、私は、nullにオブジェクトの変数を設定closePopUpイベントを呼んでいる:フレックス4:ガベージコレクションが機能しない

// application 
private var myObject:MyObject; 

private function openPopUp():void 
{ 
    myObject = new MyObject(); 
    myObject.addEventListener('closePopUp', closePopUp); 
    PopUpManager.addPopUp(myObject, this, true); 
} 

private function closePopUp(e:Event):void 
{ 
    myObject = null; 
} 

しかし、デバッグモードでは、私はmyObjectというはnullに設定されますが、メモリ使用量が」doesnのされて見ることができますt減少する。コンポーネントをもう一度開くと、メモリ使用量は以前と同じになります。

myObject変数がnullに設定されていると、GCがオブジェクトをリサイクルしてメモリを解放すると思います。なぜこれが起こっていないのでしょうか?

+1

デバッグモードでは、System.gc()を呼び出してガベージコレクションを強制することができます(ただし、リリースでは使用できません)。 – alxx

答えて

4

イベントリスナーを削除してみてください。そこにハングしていると、GCがあなたのオブジェクトを収集できなくなります。

+0

いいえ、それは神話です。 [ここ](http://gingerbinger.com/2010/07/actionscript-3-0-events-the-myth-of-useweakreference/)または[ここ](http://stackoverflow.com/questions/10290298)を参照してください。/actionscript-3-do-self-event-listeners-object-from-being-garbage-colを防止する)。 – nwellnhof

3

Flash Playerのガベージコレクションは正確な科学ではなく、ほとんどの人が期待するものと少し違っています...要約すると、必要以上にメモリが解放されます。 Deinは、イベントリスナーを言うように、また

http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html

:これらの記事は、より詳細にそれを説明しますFlashのメモリリークの最も一般的な原因です。あなたは非常に注意して、常にそれらを削除しようとする必要があります。