Edited at

Go 1.5以降のガベージコレクタについてのプラン

More than 5 years have passed since last update.

Go 1.4+ Garbage Collection (GC) Plan and Roadmapの要訳です。元々の文章を書いたRichard L. HudsonさんはGCでは実績のある人です。オリジナルはもっと詳しいので詳細については元の文章を読んでください。


Go 1.5 (2015年6月)ではGCレイテンシの低減を目指す。具体的には50ミリ秒ごとのGCレイテンシを10ミリ秒以下に抑える。到達可能な値の最大2倍のヒープを使う。

実装方針はstop the world (STW)とコンカレントGCのハイブリッド。STWによる停止時間を50ミリ秒ごとに10ミリ秒以下に抑え、その時間内にGCが完了しなかった場合はコンカレントGCに切り替える。これにより50ミリ秒以内のレスポンスタイムが必要なプログラムが40ミリ秒の実行時間を得ることを可能とする。この数値は1000ドルLinux PC程度を想定。いわゆるnon-generational, non-moving, concurrent, tri-color, mark and sweepコレクタを実装する。

Go 1.6(2015年12月)は1.5でのフィードバックを踏まえて目標を決めることになるが、おそらくbump pointer allocationとnursery spacesのgenerational copyを導入してスループットを向上させる。

Go 1.5で導入される新しいアルゴリズムではレイテンシは大幅に短くなるがスループットが低下してしまう。それを相殺するため別個の最適化を行い、バージョンを上げることによって性能が悪化しないようにする。