13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoのGarbage CollectionとGreen Tea GC

Last updated at Posted at 2025-10-06

はじめに

Goで開発しているとたまに「GC(Garbage Collection)」という言葉を耳にすることありますよね。
でも正直、仕組みまでちゃんと説明できる人って少ない気がします。自分もその一人でした。

「GCってなんか頑張ってくれてるやつでしょ?」
「Green Tea GCって最近聞くけど、お茶なの?GCなの?」

そんな“ふわっとした印象”や“ちょっとした疑問”を整理するために、社内勉強会で発表してみました🍵
せっかく40枚以上もスライドを作ったので、Qiitaにも共有します!

「GCよく分からんけどちょっと知りたい」という人向けです 🙌

発表スライド

発表内容

ここでは概要だけ紹介します。
より詳しい図解や解説は、発表スライドをご覧ください👆

1. GCの基礎知識

  • GCとは何か、なぜ必要なのか
  • ルートセット、スタック/ヒープ、STWなどの基本概念
  • メモリ構造の図解

2. GoのGC実装

  • Mark & Sweepアルゴリズム
  • Tri-color Marking
  • Concurrent Mark & Sweep
    (スライドではフェーズごとの図解を載せています)

3. 現在のGCの課題

  • キャッシュヒット率の低さ
  • メモリアクセスの非効率性
  • ハードウェアトレンドとのミスマッチ(Memory Wall問題)

4. Green Tea GCのアプローチ

  • スパンベーススキャニングの仕組み
  • なぜキャッシュヒット率が向上するのか
  • メモリトポロジー最適化(NUMA対応、8KiBアライメント)
  • 実装状況と今後の展望

5. 参考:Ruby/PythonのGC

  • 各言語のGC方式の比較
  • パフォーマンス比較表

まとめ

  • GCの基礎
    • 不要メモリの自動回収で安全・効率的な開発を実現
  • GoのGC実装
    • Concurrent Mark & Sweep(低レイテンシー)
  • Green Tea GC
    • オブジェクト単位ではなくメモリブロック(スパン)単位でスキャンする
    • キャッシュヒット率の向上
    • Go 1.25で実験的に利用可能(GOEXPERIMENT=greentea)
  • 今後はGreen Tea GCの実用化に期待

参考文献

発表資料にも記載していますが、主な参考文献は以下の通りです:

おわりに

勉強会では「GC全然わからん」だった人が「GCちょっとわかる!」になったり、
「今までふーんって感じのものに温度が乗った気がする」という感想をもらえたりして、やってよかったな〜と思いました。

自分自身も調べる中でGCのアルゴリズムやCPUキャッシュ、メモリアクセスの最適化といった低レイヤーに触れられて、とても勉強になりました。

この記事を読んだ方も「GCってちょっと面白いかも」と思ってもらえたら嬉しいです 🙌
ここまで読んでいただきありがとうございました!

13
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?