當前位置:編程學習大全網 - 網站源碼 - go的垃圾回收算法

go的垃圾回收算法

從Gov1.12版本開始,Go使用了非分代的、並發的、基於三色標記清除的垃圾回收器。

關於垃圾回收,比較常見的算法有引用計數、標記清除和分代收集,Golang語言使用的垃圾回收算法是標記清除。

Golang語言的標記清除垃圾回收算法,為了防止GC掃描時內存變化引起的混亂。那麽就需要 STW,即Stop The World。具體在Golang語言中是指,在GC時先停止所有goroutine。再進行垃圾回收,等待垃圾回收結束後再恢復所有被停止的goroutine。

標記清除方法

啟動STW,暫停程序的業務邏輯,找出不可達對象和可達對象。

將所有可達對象做標記,清除未標記的對象。停止STW,程序繼續執行。循環往復,直到進程程序生命周期結束。因為STW需要暫停程序,為了減少暫停程序的時間。將清除操作移出 STW執行周期,但是優化效果不明顯。

所謂三色標記,實際上只是為了方便敘述而抽象出來的壹種說法,三色對應垃圾回收過程中對象的三種狀態。白色是對象未被標記,gcmarkBits對應位為0,該對象將會在本次GC中被清理。灰色是對象還在標記隊列中等待被標記,黑色是對象已被標記,gcmarkBits對應位為0,該對象將會在本次 GC中被回收。

  • 上一篇:有maxcomputer 為什麽阿裏要建emr
  • 下一篇:cosx^3+secy^3-3axy=0
  • copyright 2024編程學習大全網