Go 的垃圾收集實作
Go 是一種實現自動記憶體管理垃圾收集的語言。 Go 的初始版本使用保守的標記和清除收集器,但從那時起,實作已經發生了演變。
Go 1.1 到1.3 GC 更新:
Go 1.4 GC計畫:
- 混合停止世界/同時收集器
- 三色標記- and-sweep 演算法
- 非分代and非壓縮
Go的垃圾收集特性:
-
標記和清除: 涉及標記靜止的物件引用並清除未標記的物件。
-
非分代: 不依照物件年齡將堆劃分為不同的世代。
-
非壓縮: 不移動記憶體中的活動物件。
-
完全精確: 準確追蹤對物件的所有引用,消除懸空指標的可能性。
-
Stop-the-world: 在垃圾回收期間暫停程序(在 Go 1.4 中),導致暫停。
-
低延遲:旨在減少垃圾期間的暫停時間
替換Go GC 的注意事項:
替換Go 的垃圾收集器是一個有爭議的話題。需要考慮的一些因素包括:
-
分代 GC: 可能不會為較小的堆提供顯著的性能改進。
-
不安全的包: 使實現完全精確和緊湊的垃圾收集器具有挑戰性。
以上是Go 的垃圾收集是如何運作的,有什麼權衡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!