Yogのガーベージコレクション

Yogは、複数のガーベージコレクションをサポートしています。どのGCになるかは、実行するモジュールで決まります。

モジュール名 GC
yog-copying コピーGC
yog-mark-sweep マーク・スイープGC
yog-mark-sweep-compact マーク・スイープ(・コンパクト)GC
yog-generational 世代別GC
yog-bdw BoehmGC

なお、バージョン0.0.5のyog-mark-sweep-compactは、名前に反してコンパクションしません。これは、将来実装される予定です。

さて、こんな風に複数のGCを実装しているのは、「実装時の効率ならBoehmGCが最高(0時間で実装できる)だが、実行時の効率はどうなのか。他にいいGCがあるのではないか」という疑問を持ったためです。

で、気になる実行速度ですが、コピーGC(つまりyog-copying)がもっとも速いです。gprofでプロファイルをとってみましたが、yog-copyingならGC(とメモリの割り当てを含むメモリ管理)はボトルネックになっていないです。

もっとも、現在のYogの本格的なアプリケーションは、ドキュメントを生成するスクリプト(ソースツリーのdoc/makedoc.yg)だけであり、実行速度はこれでしか計測できていません。今後は、いくつかのアプリケーションを作成して、使い心地をみていくつもりです。