GoのGarbage Collector「Green Tea」がデフォルトに

मूल शीर्षक: Watching Go's new garbage collector move through the heap

यह क्यों महत्वपूर्ण है

Go 1.26でGreen TeaがデフォルトGCとなったことは、本番環境のGoアプリケーションのメモリ効率とパフォーマンスに直接影響するため、開発者にとって重要な変更点だ。

Go 1.25で導入されたGarbage Collector「Green Tea」は、Go 1.26でデフォルトとなった。本記事では、heap上でのオブジェクト配置をperfで観測し、非移動型CollectorによるSparse Pageの課題を検証している。

Go 1.25で新しいGarbage Collector「Green Tea」が導入され、数か月前にリリースされたGo 1.26ではデフォルトのGCとなった。

Goのメモリ管理は、同一サイズクラスのObjectを連続したチャンク(Span)にまとめ、8KiBページ単位で管理する。このSize-Segregated Allocationは、GoのAllocatorの元となったtcmallocなどでも広く使われている手法だ。

記事では、Small(32バイト)・Medium(64バイト)・Large(128バイト)の3サイズのObjectを100個ランダムにAllocateし、そのHeapアドレスを可視化することで、GoとC#それぞれのメモリ配置パターンを比較している。

Go 1.26のGreen TeaはCache-Friendlinessの向上が主な改善点だが、Goが採用する「非移動型Collector」には構造的な課題も残る。Objectを移動できないため、Allocateされたオブジェクトが少ないSparse PageをGCが回収できないという問題が発生するケースがある。記事ではperfを使ったパフォーマンス観測と合わせて、どのようなプログラムがGreen Teaの恩恵を最も受けるか、また恩恵を受けにくいケースはどこかを具体的に示している。

स्रोत

theconsensus.dev — मूल लेख पढ़ें →