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)だけであり、実行速度はこれでしか計測できていません。今後は、いくつかのアプリケーションを作成して、使い心地をみていくつもりです。