読者です 読者をやめる 読者になる 読者になる

Flash制作講座フラッシュ制作講習

FLASH制作からActionScriptによるFlashコンテンツ制作のためのフラッシュ制作講座

AS3.0とガベージコレクション


ActionScript3.0でフラッシュ制作をするにあたって、関数のエスケープやメモリリソースの意識は避けては制作できなくなっています。


AS3で作成したフラッシュコンテンツの挙動がおかしいので、パブリッシュ時にデバッグをしてみると、
addEventListenerの処理関数で変数代入を延々と続けているではないですか。



回避するためには、デストラクタのような処理をして開放してあげる必要があるようです。


基本的にAS3は完全にプログラム論理が必要になっていますね。



【Flashガベージコレクションとは】

StageからremoveChildしたり、変数にnullを代入するだけではメモリーリークは解消されないです。addEventListenerだったらremoveEventListenerをしてあげることで、ガベージコレクションが起動して一定時間間隔でメモリを開放してくれます。




ちなみに携帯用ActionScirpt、Flash Liteではアプリケーションが参照しなくなったオブジェクトや変数をメモリから定期的にクリアします。Flash Liteでは60秒ごと、もしくはアプリケーションメモリの使用が 20% 以上急増したときにガベージコレクションプロセスが実行されまるようです。


例えばremoveChildでコンテンツを削除するだけでは不完全で、removeChild後に変数にnull代入とdeleateでガベージコレクションの起動条件を揃えるようなイメージでしょうか。


簡単にいうと変数や関数を一つ宣言するだけで、パソコンのメモリ上にそのための場所が確保されることになります。数や処理が増えればそれだけパソコンのメモリ負荷が高まるわけですから、ガベージコレクション(ごみ集め的な意味だったと)起動を上手く利用して、メモリリークをなくし、かつActionScript3.0のアルゴリズムにもかなりの配慮が必要なわけです。



そういえば、ActionScript2.0ぐらいまではパブリッシュ時にブラウザがたまに



『Flashムービーの作成中にエラーが発生しました。メモリが不足しています』



のエラーダイアログを表示してフリーズしたことがあったけど、大抵は記述ミスかシンタックスエラーでしたが、すでにプログラム設計的な理解をもたないとActionScriptをからめたフラッシュコンテンツは作成が結構難しいのですね。