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

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

Ryotaro
March 02, 2025

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

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