Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Green Tea GCの動作を紙芝居にしてみる
Search
uji
September 04, 2025
1
70
Green Tea GCの動作を紙芝居にしてみる
uji
September 04, 2025
Tweet
Share
More Decks by uji
See All by uji
Go Proverbs の紹介
uji
2
130
Go標準の暗号ライブラリメンテナンス戦略
uji
3
640
NOT A HOTEL TECH TALK ーSOFTWARE 3.0への道筋ー NEXT Web3 (2024-08-07)
uji
0
170
マネーフォワード ME ブロックチェーン連携機能におけるGoの活用方法
uji
1
230
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
uji
1
730
標準パッケージ初のgenerics利用事例 "sync/atomic.Pointer"
uji
2
900
5分で完全理解するGoのiota
uji
11
7.2k
GoのGC (garbage collector)について理解する
uji
11
7.7k
シンプルなモック生成ツール matryer/moq 使ってみた
uji
0
630
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
GitHub's CSS Performance
jonrohan
1032
460k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
2.6k
Fireside Chat
paigeccino
40
3.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Rails Girls Zürich Keynote
gr2m
95
14k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Transcript
Green Tea GC の動作を紙芝居にしてみる 2025-08-31 Kyoto.go #63 オフラインLT会
⾃⼰紹介 • 名前: uji • 神⼾市在住 • NOT A HOTEL
所属 • Gopher 7年⽣ • KOBE.go, Kyoto.go 運営 https://twitter.com/uji_rb
Kyoto.go KOBE.go
メモリ上のごみを⾒つけて回収し、 再利⽤できるようにしてくれる仕組み 開発者が⼿動メモリ管理からの解放され、 より本質的なプログラミングに集中できる • 使われなくなったメモリ領域の解放 • メモリリークや脆弱性などのリスク低減 そもそもGCって何?
既存のGCの動作
1. Mark 2. Mark termination 3. Sweep 4. Sweep termination
terminationの際、アプリケーションは停⽌ GCの動作の流れ https://github.com/golang/go/blob/master/src/runtime/mgc.go
Mark
Mark
Mark 灰⾊は探索の再開位置のキューイング対象
Mark termination
Sweep
Sweep termination
詳しくは… https://gocon.jp/2022spring/ja/sessions/a4-s/
• Go 1.25 に実験的に導⼊された新しいGCアルゴリズム • 「局所性」の問題を解決する⽬的で作られた ◦ 空間的局所性(メモリ内の全く異なる領域間を⾶び回る) ◦ 時間的局所性(同じメモリへの⾮効率的なアクセス)
• 実⾏時間の平均85%がグラフ探索のスキャンループに消費 その35%以上は、メモリからのデータが読み込みを待っている • spanと呼ばれる単位でスキャンとMarkを⾏う Green Tea GC とは? https://github.com/golang/go/issues/73581
「局所性」の問題 オブジェクトがメモリのどこにあるかを全く意識してない
Green Tea GCのスキャン Stack Heap 場所が近いオブジェクトをspanにまとめて、span単位でスキャンする
Green Tea GCのMark Stack Heap 代 表 到達したspanを灰⾊にする(キューイング) 最初に到達したオブジェクトは代表オブジェクト
Green Tea GCのMark Stack Heap 代 表 代 表
Green Tea GCのMark Stack Heap 代 表 代 表 代
表 代表オブジェクト以外にもアクセスされている場合 span内のオブジェクトを全てスキャン対象にする(ヒットフラグ👊が⽴つ)
Green Tea GCのMark Stack Heap 代 表 代 表 代
表 スキャンが終わったspanは黒に メモリ領域が近いオブジェクトを効率的にスキャンできる