2026年2月10日、Go 1.26が正式リリースされた。最大の目玉は、実験的機能からデフォルトに昇格したGreen Tea ガベージコレクタである。GCオーバーヘッドを10〜40%削減し、小オブジェクトのアロケーションを最大30%高速化、CGOベースラインを約30%改善するこのリリースは、Kubernetes・Docker・Prometheusなどクラウドネイティブ基盤の大半がGoで書かれている現代のインフラストラクチャに広範な影響を与える。本記事では、Green Tea GCのアルゴリズム革新、AVX-512ベクタ命令の活用、そして開発者・企業にとっての実務的意味を技術的に解析する。

Green Tea GCの着想と開発経緯──2018年の着想から2026年のデフォルト化まで

Green Tea GCの構想は2018年、GoチームのAustin Clements氏がスパン(メモリブロック)上にポインタを蓄積してからスキャンするアイデアを着想したことに遡る。2024年、Clements氏が日本滞在中に「抹茶」にインスパイアされたプロトタイプで実現可能性を実証し、2025年にはMichael Knyszek氏が本番品質の実装を完成させた。

Go 1.25(2025年8月)でGOEXPERIMENT=greenteagcとして実験的に導入され、Googleの本番環境で検証された後、Go 1.26でデフォルト有効化に至った。Go 1.27では旧GCへのオプトアウトが削除される予定であり、Green Teaは今後のGo GCの基盤となる。

アルゴリズム革新──オブジェクト単位からページ単位マーキングへ

従来のGo GCは三色マーク&スイープアルゴリズムを採用し、個々のオブジェクトを単位としてスタックベース(LIFO)のワークリストで深さ優先探索を行っていた。この方式の問題は、ヒープ上に散在するオブジェクトをポインタチェーンで辿るため、メモリアクセスパターンが不規則になり、CPUサイクルの35%以上がメモリアクセス待ち(ストール)で浪費されていたことである。

Green Teaはこの構造を根本的に変える。マーキングの単位を個別オブジェクトから8KiBのメモリブロック(スパン)に変更し、キューベース(FIFO)のワークリストで幅優先探索を行う。同一スパン上の複数オブジェクトが発見されると、それらはスパンがキューから取り出されるまで蓄積され、その後まとめてシーケンシャルにスキャンされる。

各ページにつきオブジェクトあたり2ビットのメタデータを保持する。「seen」ビットはオブジェクトへのポインタが発見されたことを、「scanned」ビットはそのオブジェクトがスキャン済みであることを示す。この区別により、発見済み未スキャン、スキャン済み、ページ処理中に新たに発見されたオブジェクトを効率的に管理できる。

結果として、L1・L2キャッシュミスが約半減し、CPUプリフェッチャーが予測可能なアクセスパターンを活用できるようになった。Go公式ブログは、従来のGCを「市街地を停止・発進しながら走る運転」、Green Teaを「高速道路での長距離シーケンシャル走行」と喩えている。

AVX-512ベクタ命令によるスキャンカーネル最適化

Green Teaのもう一つの革新は、AVX-512ベクタ命令をGCスキャンカーネルに導入したことである。Intel Ice Lake以降、AMD Zen 4以降のCPUで利用可能なVGF2P8AFFINEQB(ガロア体命令)を活用し、ページ全体のビットマップ操作を512ビットレジスタで一括処理する。

具体的な処理フローは以下の通りである。まず、ページの「seen」と「scanned」ビットマップを2つの512ビットレジスタに読み込む。次に、ビットマップを比較してスキャンが必要なオブジェクトを特定する。1ビット/オブジェクトの表現を1ビット/ワードに展開し、ポインタ/スカラービットマップと交差させて「アクティブポインタビットマップ」を生成する。最後にセットビットを走査し、64バイト単位でポインタを収集する。

この最適化により、対応CPUでは通常のGreen Teaの改善に加えてさらに約10%のGCオーバーヘッド削減が達成される。クラウド環境では最新世代のインスタンスタイプ(AWS m7i、GCP n4等)を選択するだけでこの恩恵を受けられるため、コード変更なしでのパフォーマンス向上が可能である。

Green Tea以外のGo 1.26の注目機能

Go 1.26はGC以外にも重要な改善を含んでいる。言語レベルでは2つの変更が導入された。第一に、new()組み込み関数が式を引数に取れるようになった。これにより、JSONシリアライズでポインタフィールドを初期化する際のヘルパー関数が不要になる。第二に、ジェネリック型が型パラメータ内で自己参照できるようになり、複雑なデータ構造やインターフェースの実装が簡素化された。

ランタイム面では、CGOのベースラインオーバーヘッドが約30%削減された。OpenSSL、SQLite、画像ライブラリなどC/C++との相互運用を行うすべてのGoアプリケーションが、コード変更なしで恩恵を受ける。512バイト以下の小オブジェクトに対しては、コンパイラがサイズ特化のアロケーションルーチンを生成し、最大30%の高速化を実現する。

標準ライブラリではcrypto/hpke(RFC 9180 ハイブリッド公開鍵暗号)パッケージが追加され、crypto/tlsではポスト量子暗号のハイブリッドKEM(SecP256r1MLKEM768SecP384r1MLKEM1024)がデフォルト有効化された。io.ReadAllは約2倍高速化、メモリアロケーションは約50%削減されている。実験的なsimd/archsimdパッケージはAMD64でのSIMDプログラミングの道を開く。

クラウドネイティブ基盤への波及効果──Kubernetes・Prometheus・Docker

Green Tea GCの影響は個々のGoアプリケーションに留まらない。Kubernetes、Docker、Prometheus、Etcd、Helm、Istio、Ciliumなどクラウドネイティブ基盤の大半がGoで実装されており、これらのコントロールプレーンのGCオーバーヘッド削減は、クラスタ全体のスケーラビリティと応答性に直結する。

実際のベンチマークでは、地理空間データベースTile38で35%のGCオーバーヘッド削減、時系列データベースInfluxDBで5%の削減が報告されている。マイクロベンチマークではコア数が増えるほど改善幅が拡大し、10〜50%のGC CPU削減が確認された。一方、DoltHubの検証では「測定可能な差異なし」との報告もあり、低ファンアウト・頻繁な変更を伴うワークロードでは効果が限定的な場合がある。

日本市場では、Mercari(バックエンドサービス)、LINE(メッセージング基盤)、CyberAgent(AIリサーチ基盤)などがGoを主要言語として採用している。Go 1.26へのアップグレードは、コード変更なしでクラウドインフラコストの削減とレイテンシ改善を実現し得る。Uberの事例では、PGO(Profile-Guided Optimization)による4%のパフォーマンス改善が24,000 CPUコアの削減に相当したと報告されており、Green Teaの10〜40% GC削減が大規模環境にもたらすコスト効果は無視できない。

他言語GCとの比較──Java ZGC、.NET GC、Rustのアプローチ

Green Teaの設計思想を理解するには、他言語のGCとの比較が有効である。Java ZGCはサブミリ秒の停止時間をゼロダウンタイムで達成することに注力し、リージョンベースのコンカレントGCとロードバリアを用いる。Green Teaは停止時間(GoのGCは既にコンカレントで極めて短い)ではなく、GCが消費するCPU総量の削減に焦点を当てている。

.NET GCは世代別(Gen 0/1/2)アプローチで「大半のオブジェクトは若くして死ぬ」という仮定に基づく。Goは意図的に世代別GCを採用せず、全オブジェクトを等しく扱うことで予測可能性と実装のシンプルさを優先している。Rustはオーナーシップとボローチェッカーによるコンパイル時メモリ管理で、GCオーバーヘッドを完全に排除する代わりに、開発者に厳密なメモリ管理の知識を要求する。

Green Teaは、Goの設計哲学──シンプルさ、開発者生産性、ランタイム安全性──を維持しながら、ハードウェアの現実(NUMA、メモリウォール、ベクタ命令)に適応した進化と位置づけられる。「GCなし」のRustと「高度なGC」のJavaの中間で、実用主義的な最適解を追求するGoの姿勢を体現している。

FAQ

Green Tea GCとは何か?

Go 1.26でデフォルト化されたガベージコレクタで、マーキングの単位をオブジェクトから8KiBメモリブロックに変更し、GCオーバーヘッドを10〜40%削減する。三色マーク&スイープの基本構造は維持している。

Go 1.26にアップグレードするだけで性能は向上するか?

はい。Green Tea GCはデフォルト有効で、コード変更なしにGCオーバーヘッド削減、小オブジェクトアロケーション高速化、CGO改善の恩恵を受けられる。GOGC/GOMEMLIMITの設定も変更不要である。

どのようなワークロードで最も効果があるか?

高ファンアウトのデータ構造(ツリー、グラフ)、類似サイズの小オブジェクトを大量にアロケートするワークロードで最も効果が高い。Tile38で35%、InfluxDBで5%のGC削減が報告されている。

AVX-512の恩恵を受けるにはどうすればよいか?

Intel Ice Lake以降またはAMD Zen 4以降のCPUで実行するだけでよい。クラウド環境ではAWS m7iやGCP n4など最新世代のインスタンスタイプを選択すればコード変更なしで約10%の追加GC改善が得られる。

Go 1.26のその他の主要な新機能は?

new()関数が式を受け入れる言語変更、ジェネリック型の自己参照、crypto/hpkeパッケージ追加、ポスト量子暗号のデフォルト有効化、io.ReadAllの2倍高速化などが含まれる。

参考文献