是否可以为Go使用不同的垃圾收集策略?

时间:2016-11-01 19:35:30

标签: performance go garbage-collection

正如标题所说,我想知道是否可以更改Go使用的GC政策?

1 个答案:

答案 0 :(得分:1)

在某种意义上说,您可以使用完全不同的收集器,例如Java等。这是故意的;他们希望得到的东西在各处都能很好地运行,并且避免GC参数调整成为Go程序员的专长。

最常用的选项是GOGC。默认值100实质上允许您的程序增长到最后一次GC之后的实时数据量的两倍,然后再触发另一个集合。在最后一次GC之后,200会让程序增长到实时数据的3倍,50会让它增长到只有1.5倍。由于1.5使GC并发,因此集合的确切时间和节奏在引擎盖下稍微复杂一些,但是这个想法仍然是针对峰值内存使用量~2倍的实时数据。

实际上,我已经看到GOGC的主要用途是人们增加它以减少程序的垃圾收集工作量,因为他们知道他们有多余的内存。例如,人们使用GOGC=400运行Go编译器,或者稍微加速一下。但是请注意,通过占用大量内存而不是花费几个百分点的CPU时间来摧毁服务器会更加灾难性,所以不要过度使用它。

package runtime中记录了存在的其他旋钮。通过当前的实施,您可以强制GC再次停止世界,或使用runtime.GC()明确触发可能停止世界的集合。与GC旋钮分开,runtime还允许您ReadMemStats并获取 经常有用的个人资料。

您通常不希望将重点放在可能的小GC调整上;默认设置工作得很好,通常可以更好地花时间考虑应用程序。