GO—閑聊GC

1.什么是gc?

Garbage Collection 簡稱為GC,是垃圾回收的意思。GC就是為了回收進程運行時不再使用的內(nèi)存。但是GC會導(dǎo)致一個嚴重的問題就是會引起STW(stop-the-world)出現(xiàn),也就是整個進程會阻塞,直到GC結(jié)束。應(yīng)該盡可能的減少進程的GC時間,而且GO每兩分鐘就會執(zhí)行一次GC操作

2.如何進行GC測試?

  • GODEBUG gctrace =1 go run main.go
  • 或者寫一個系統(tǒng)的腳本文件運行,里面加入export GODEBUG=gctrace=1

3.GC測試的信息都是什么意思?

垃圾回收信息

gc 1 @2.104s 0%: 0.018+1.3+0.076 ms clock, 0.054+0.35/1.0/3.0+0.23 ms cpu, 4->4->3 MB, 5 MB goal, 4 P。
下面根據(jù)上面的回收信息進行解讀:
1 表示第一次執(zhí)行

信息 解釋
1 表示第一次執(zhí)行
@2.104s 表示程序執(zhí)行的總時間
0% 垃圾回收時間占用的百分比,估計是和上一次的gc效率做對比
0.018+1.3+0.076 ms clock 垃圾回收的時間,分別為STW清掃的時間, 并發(fā)標記和掃描的時間,STW標記的時間
0.054+0.35/1.0/3.0+0.23 ms cpu 垃圾回收占用cpu時間
4->4->3 MB 堆的大小,gc后堆的大小,存活堆的大小
5 MB goal 整體堆的大小
4 P 使用的處理器數(shù)量
系統(tǒng)內(nèi)存回收信息

scvg0: inuse: 426, idle: 0, sys: 427, released: 0, consumed: 427 (MB)

|信息|解釋|
|426|使用多少內(nèi)存|
|0|剩下要清除的內(nèi)存|
|427|系統(tǒng)映射的內(nèi)存|
|0|釋放的系統(tǒng)內(nèi)存|
|427|申請的系統(tǒng)內(nèi)存|
|(MB)|以MB為單位|

GC優(yōu)化思路?

減少headObject,減少對象的創(chuàng)建。這個可以使用pprof的測試軟件來測試headObject的產(chǎn)生數(shù)量。常用的思路有:

  • 減少使用以string為key的map
  • 減少對象
  • 用memprof、cpuprof、GCTRACE來觀察程序。
  • 避免頻繁創(chuàng)建對象(&abc{}、new(abc{})、make()),頻繁調(diào)用的地方用對象池重

了解優(yōu)化GC的文章:
https://www.zhihu.com/question/21615032

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容