ガベージコレクションを意識してみる

AS3.0ではこれまで以上にメモリマネージメントについて注意を払う必要があるそうです。そんなわけでMoock先生のEssential ActionScript 3.0のChapter 14: Garbage Collectionを読んでみました。例によってよく理解できないこともあるのですが、理解できたことだけメモ。

ガベージコレクションの仕組み】

  1. Flashが実行されるとある一定量のメモリがOSによって自動的に割当てられる
  2. オブジェクトが生成される度にメモリ容量が蓄積されていく
  3. メモリの蓄積が一定量を超えると、ガベージコレクションが実行される周期が決定される
  4. 3の周期でガベージコレクションが実行され、メモリ内の不要なオブジェクトを削除する


ガベージコレクションの対象】

  • プログラム内で参照されていないオブジェクト。
  • 生成したオブジェクトを手動で削除することはできないが、参照値にnullを代入してやることによってガベージコレクションの対象とすることができる


【その他学んだこと】
ガベージコレクションの対象となっているオブジェクトも、ガベージコレクションが実行されるまでは存在し続ける。そのため、以下のような処理に留意

  1. イベントリスナーの登録解除
  2. timerやintervalの停止
  3. MovieClipの再生停止
  4. 上記の処理を外部から実行できるpublicメソッドを実装*1

こんな感じです。間違って理解している可能性も大いにあり得るので、興味がある方はMoockさんの本を実際に読んでみることをお奨めいたします。

*1:Interfaceの章を読んでたら、ネーミング慣例としてIKillableというのが挙ってました。これはつまりイベントリスナーの解除やタイマーの停止のためのpublicメソッドを実装し忘れないためのInterfaceかと思われます。頭いい!僕はIDisposableインターフェースにdiposeというメソッドを登録して使ってみようと思います。Moock先生にリスペクト。サイン貰いに行きます。