Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goのガベージコレクション

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Ryotaro Ryotaro
March 02, 2025

 Goのガベージコレクション

Avatar for Ryotaro

Ryotaro

March 02, 2025
Tweet

More Decks by Ryotaro

Other Decks in Technology

Transcript

  1. Goのガベージコレクショ ン concurrent, tri-color, mark-sweep collector4 原典は On-the-Fly Garbage Collection:

    An Exercise in Cooperation1 ∘ 著者は Dijkstra と Lamport ∘ 1978 年に発表 ∘ Java の ZGC でも 3 色マーキキングが使われる5 ∘ エンタープライ ズ向きではない ∘ 世代別 GC ではない 2
  2. 局所的なメモリ の割り当て フィ ールド は構造体に埋め込まれる2 type Reader struct { r

    io . Reader pad int64 curr fileReader } 連続領域への割り当て 4
  3. アプリ ケーショ ン (mutator) の振る舞い 向き先の白いノ ード を灰にし て、 辺の向き先を変える

    mutator の操作 ∘ step2 で、 前回変更し た有向辺の白い向き先を灰色にする ∘ 向き先が灰か黒なら step2 はいらない ∘ step2 と step3 は別のアト ミックな操作でいい 12
  4. マーキングフェ ースの疑似コード 一巡しても灰色ノ ード がなければ終了 i , k = 0,

    M # Mは ノ ー ド 数 while k > 0: c = nodes [ i ] . color // atomic i f c == GRAY: k = M for side in range ( 2 ) : succ := nodes [ i ] . successors [ side ] // atomic // begin atomic i f succ . color == WHITE: succ . color = GRAY // end atomic nodes [ i ] . color = BLACK // atomic else : k −= 1 i = ( i + 1) % M 15
  5. アペンディ ングフェ ーズ 白ノ ード をリ スト に追加し 、 黒ノ

    ード を白にする for i in range (m) : color := nodes [ i ] . color // atomic i f color == WHITE: f r e e _ l i s t . append( nodes [ i ] ) // atomic else : // color == BLACK nodes [ i ] . color = WHITE // atomic このフェーズには、 灰色のノ ード はない 16
  6. 参考資料 [1] Edsger W. Dijkstra et al. ``On-the-fly garbage collection:

    an exercise in cooperation''. In: Commun. ACM 21.11 (Nov. 1978), pp. 966–975. issn: 0001-0782. doi: 10.1145/359642.359655. url: https://doi.org/10.1145/359642.359655. [2] Richard Hudson. Getting to Go: The Journey of Go's Garbage Collector. 2018. url: https://go.dev/blog/ismmkeynote. [3] Richard Hudson. Go GC: Latency Problem Solved. 2015. url: https://go.dev/talks/2015/go-gc.pdf. [4] Richard Hudson. Go GC: Prioritizing low latency and simplicity. 2015. url: https://go.dev/blog/go15gc. 19
  7. 参考資料 [5] Albert Mingkun Yang and Tobias Wrigstad. ``Deep Dive

    into ZGC: A Modern Garbage Collector in OpenJDK''. In: ACM Trans. Program. Lang. Syst. 44.4 (Sept. 2022). issn: 0164-0925. doi: 10.1145/3538532. url: https://doi.org/10.1145/3538532. 20