VisualWorks の Garbage Collection 戦略

VisualWorks(Smalltalk の有名な処理系)の GC についての資料をここにまとめておきます。

概説

VW の virtual machine では、 洗練された記憶域管理が行なわれています。 以下のような特徴があげられるでしょう。

こういった特色は、 この分野では先進的と思われる 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
記憶域管理の政策を司る。例えば、 など。 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