Flashのガベージコレクションに関する正しい理解

AVM2の備えるガベージコレクションアルゴリズム

* Deferred Reference Counting (DRC)
 遅延参照カウント (DRC)
* Backed by incremental conservative mark/sweep collector
 (DRCの支援として) 保守的なインクリメンタル マーク/スイープ

これがFlash Player 9のリリース時にアナウンスされています。
もう何年も前の話です。
(http://www.onflex.org/ACDS/AS3TuningInsideAVM2JIT.pdf)

Flashユーザーのこのあたりに関する理解はいったいどうなっているのか、
Flash Playerのガベージコレクション(以下 GC)について解説しているサイトをいろいろ見てみました。
しかし、どうも間違った理解が多いような気がするのです。。
(もちろん僕の理解の方が間違っている可能性はあるわけですが)

どうしてこうなった?

1. Adobe公式の文書は難しくて理解できなかった
 ↓
2. 要素を1つ1つ噛み砕いて理解すべきだと考えた
 ↓
3. まずはGCのベースアルゴリズムを順に勉強した
 ↓
4. いつの間にかベースアルゴリズムを”FlashのGCアルゴリズム”そのものだと思いこんでしまった

たぶん、こんな感じ。

世界中から参照されているであろうgskinner氏のエントリーでは、
まず、参照カウントとマーク&スイープのベースアルゴリズムの解説をしてから、
最後の段落で A *very* important thing ~ として “GCの動作は遅延する” と書かれています。
gskinner.com: gBlog: AS3: Resource Management pt 1
AVM2のGCアルゴリズムでは “deferred” という言葉が重要な意味を持ちます。
当時、この情報はローカライズされて日本のFlash Developerの間にも広まったはずですが、
各自の解釈を連ねていった結果、おかしなことになったのだと思います。

僕がMMgc(TamarinのGC実装)を読んだのは学生時代で今は記憶が曖昧なので、
少し整理してから後でエントリーに起こしたいと思います。

あわせて読む:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です