请说一说Golang 的 GC的触发条件?

Go语言的垃圾收集(GC)是一个自动的内存管理机制,它会周期性地查找并回收不再被程序使用的内存。Go的GC是一个并发标记-清除(Concurrent Mark-Sweep)类型的垃圾收集器。GC的触发条件主要是基于内存的分配量。

以下是Go语言GC的主要触发条件:

  1. 内存分配量:当从上一次GC结束后新分配的数据达到一定量时,GC就会触发。这个阈值是上一次GC中”活跃”对象所占用的内存的倍数,这个倍数(也称为GC百分比,GC Percent)默认是100,表示新分配的内存达到上一次GC活跃对象内存的两倍时,会触发新的GC。你可以通过debug.SetGCPercent函数来修改这个比例。

  2. 手动触发:你可以通过调用runtime.GC()函数来手动触发GC。

  3. 内存压力:如果系统的内存压力较大,也可能触发GC。

值得注意的是,Go的垃圾收集器是并发运行的,这意味着它会尽量地减少对程序性能的影响。在Go 1.8及以后版本中,垃圾收集器的STW(Stop The World,所有goroutine暂停,用于GC标记和清扫阶段)时间已经被大大降低,使得Go语言可以用于更多对延迟敏感的应用。

发表评论

后才能评论