2011-11-07 18 views
0

は、私は誰もが私を助けることができる場合、私は疑問に思うAS3のメモリ管理に関する質問があります。AS3 - メモリ管理

public class SoundStore extends Sprite{ 

var s:Sound; 

それから私は、私は新しいサウンドをロードしたいたびに、この変数を複数回参照様々なクラス関数内:私はこのような場合またはタイプのサウンドで、クラスのインスタンス変数を、作成したと仮定すると

s = new Sound(); 

私は新しいサウンドを作成するたびに以前の割り当てられたメモリを上書きするだろうと考えていますか?

おかげ

答えて

5

号AS3は、未使用のオブジェクトを処分するために参照カウントを使用してガベージコレクト言語です。

s変数は、内部的には、Soundオブジェクトを含むメモリブロックへのポインタです。あなたがs = new Sound() AS3を行うたびに、メモリ内の新しいSoundオブジェクトを作成し、そのオブジェクトのアドレスへsポインタを設定します。古いオブジェクトはまだメモリに存在します。古いオブジェクトへの参照がない場合、ガベージコレクタはある時点、通常は次のコレクションラウンドでオブジェクトを破棄します。つまり、いつでもメモリ内に参照されていないがリソースを使い切っている複数のオブジェクトが複数ある可能性があります。ガベージコレクタは、割り当てられたすべてのオブジェクトを定期的にトラップし、そのオブジェクトへの参照がない場合は破棄するように設計されています。 http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html

+0

OK感謝:

は、ここでのFlash/AS3でのGCの素晴らしい記事です。私はGCがいつ実行されるかについて特別なコントロールがないことを理解しています。 私は以下のなかった場合、これは私のメモリ管理に役立つだろう: 試し{ S = NULLを。 }キャッチ(E:エラー) {}、S =新しいSound(); – crooksy88

+2

いいえsはSoundのインスタンスを指していなくなりますが、アプリケーション全体の中の他の誰もそれを指し示すまで、Memoryに座っています。 (これには、 'useWeakRefereces'がtrueに設定されていない限り、イベントが含まれます)。 – WORMSS

+0

Flash * 10以降でガベージコレクションを強制するには 'System.gc()'を呼び出せますが、**本当に悪い考えです。それはパフォーマンスを完全に妨害し、デバッグ以外の何かを保証するものでもありません。 – Polynomial