VisualWorks の Garbage Collection 戦略
VisualWorks(Smalltalk の有名な処理系)の
GC についての資料をここにまとめておきます。
概説
VW の virtual machine では、
洗練された記憶域管理が行なわれています。
以下のような特徴があげられるでしょう。
- 高速の scavenger と incremental GC のおかげで、
GC のために長時間も処理が止まることはない。
- 必要であれば、記憶域管理や GC の振舞いをユーザ(プログラマ)が観察できる。
- GC はシステムに埋め込まれた機能ではなく、ある程度プログラミング可能である。
- Lisp などの世界でいう、"weak" な reference を作ることができる。
こういった特色は、
この分野では先進的と思われる Lisp 処理系の世界と比べても、
全く遜色のないものと思われます。
VisualWorks の GC 戦略発表 OHP
1995年11月22日に行なった、ソフトウェア技術者協会横浜支部(YDOC)での、
「VW における GC の戦略」の発表で使った OHP
を公開しておきます。
参考文献
A. ObjectWorks のマニュアル
メモリ管理について一章が割いてあったが、今は一般には入手困難。
B. source code
記憶管理に集中してソースコードを見たい場合は、以下の部分を読むとよいでしょう。
- ObjectMemory
- クラスメソッドには記憶域管理関係のものがある。
インスタンスは、ある瞬間の記憶域の統計を保持している。
- ・comment
- ・ ObjectMemory class の documentation プロトコル
- ・ObjectMemory class>>current:
- 今この瞬間の記憶域の状態の統計をとる。
an instance of ObjectMemory が得られる。
- ・ObjectMemory class の growing memory プロトコル
- ・ObjectMemory class>>sizesAtStartUp: 起動時の空間の設定
- ...まあ、ObjectMemory ってぐらいだから、みんな関係あるんだけど...
- MemoryPolicy
- 記憶域管理の政策を司る。例えば、
- 暇な時は何をしてるか(idleLoopAction)
- 残りの領域が少なくなってきたらどうやって空き領域を確保するか(low space プロトコル)
など。
ObjectMemory currentMemoryPolicy は、標準では a MemoryPolicy になっている。
しきい値の調整だけでは気に食わなければ、自分でサブクラスを作ってもよい。
- ・comment
- ・MemoryPolicy>>preferredGrowthIncrement:
- 本当に空き領域がない時に、ObjectMemory にどのくらいづつ空間を要求するかの「目安」。一緒に、growthRetryDecrement も調整した方がよい。
C. MemoryObserver
このページで説明した VisualWorks の記憶域管理の実態を
visual に表現してくれる MemoryObserver というツールがあります。
SRA の FTP サイトの中の
smalltalk goodies
の所に、VW の各バージョンに対応したものが置いてあります。
D. VW に限らない GC 一般の参考文献
情報処理学会の学会誌1994年11月(Vol.35 No.11) の概説
「ごみ集めの基礎と最近の動向」は、
手短で正確でわかりやすい。
内容も、まだそんなに古くなくてよいと思う。
ただ、Java の動向がどうなっていくかは、今後注意が必要。
渡邊克宏
katsu@watanabe.name