GO—闲聊GC

作者: Flippancy | 来源:发表于2017-07-21 22:22 被阅读279次

1.什么是gc?

Garbage Collection 简称为GC,是垃圾回收的意思。GC就是为了回收进程运行时不再使用的内存。但是GC会导致一个严重的问题就是会引起STW(stop-the-world)出现,也就是整个进程会阻塞,直到GC结束。应该尽可能的减少进程的GC时间,而且GO每两分钟就会执行一次GC操作

2.如何进行GC测试?

  • GODEBUG gctrace =1 go run main.go
  • 或者写一个系统的脚本文件运行,里面加入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。
下面根据上面的回收信息进行解读:
1 表示第一次执行

信息 解释
1 表示第一次执行
@2.104s 表示程序执行的总时间
0% 垃圾回收时间占用的百分比,估计是和上一次的gc效率做对比
0.018+1.3+0.076 ms clock 垃圾回收的时间,分别为STW清扫的时间, 并发标记和扫描的时间,STW标记的时间
0.054+0.35/1.0/3.0+0.23 ms cpu 垃圾回收占用cpu时间
4->4->3 MB 堆的大小,gc后堆的大小,存活堆的大小
5 MB goal 整体堆的大小
4 P 使用的处理器数量
系统内存回收信息

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

|信息|解释|
|426|使用多少内存|
|0|剩下要清除的内存|
|427|系统映射的内存|
|0|释放的系统内存|
|427|申请的系统内存|
|(MB)|以MB为单位|

GC优化思路?

减少headObject,减少对象的创建。这个可以使用pprof的测试软件来测试headObject的产生数量。常用的思路有:

  • 减少使用以string为key的map
  • 减少对象
  • 用memprof、cpuprof、GCTRACE来观察程序。
  • 避免频繁创建对象(&abc{}、new(abc{})、make()),频繁调用的地方用对象池重

了解优化GC的文章:
https://www.zhihu.com/question/21615032

相关文章

  • GO—闲聊GC

    1.什么是gc? Garbage Collection 简称为GC,是垃圾回收的意思。GC就是为了回收进程运行时不...

  • go-内存机制(4)

    go的GC机制 GO的GC是并行GC,也就是说GC的大部分清理和普通的go代码是同时运行的,这让GO的GC流程比较...

  • Go GC

    1、什么是GC?2、为什么会有GC?3、GC的优点?4、GC的缺点?5、Go中的GC历史6、Go中的GC实现原理(...

  • Go语言——垃圾回收GC

    Go语言——垃圾回收GC 参考: Go 垃圾回收原理 Golang源码探索(三) GC的实现原理 Getting ...

  • Golang垃圾回收gc调优

    示例代码 test.go 命令行调用go程序代码,输出gc信息到日志 golang gc 优化思路以及实例分析

  • Go开发关键技术指南:SRS & Others

    Others 关于Go,还有哪些重要的技术值得了解的,下面详细分享。 GC GC一般是C/C++程序员对于Go最常...

  • 申请美国本科留学:美国本科Go Campus项目

    1. 基本概况 关于GC Go Campus项目全称为Go Campus-My Scholarship Progr...

  • 如何在Mac源码安装Go1.5开发环境

    到这里下载Go语言源码包。Go1.4到Go1.5是Go语言脱胎换骨的一次变更,The gc tool chain ...

  • GO语言-GC

    引言 垃圾回收机制是高级语言常见的一类内存资源管理方式,C/C++这类语言内存分配及回收很大的主动权在调用者,gc...

  • go gc 分析

    1 先翻译一下runtime 文档中,关于gc的内容(里面涉及GC日志格式) ···原文: https://gol...

网友评论

    本文标题:GO—闲聊GC

    本文链接:https://www.haomeiwen.com/subject/ispjfxtx.html