正如标题所说,我想知道是否可以更改Go使用的GC政策?
答案 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调整上;默认设置工作得很好,通常可以更好地花时间考虑应用程序。