作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
我直接说说核心原理:
- 程序一开始,分配很大一块堆内存,以此来扩大heap区域
- 在main()函数一开始的地方分配大内存
- 具体代码为 xx := make([]byte, 102410241024*10)
- 这个内存在程序运行期不释放
- 这个内存在程序运行期也不使用
- 因为不使用,所以分配的大内存占了很大的虚地址空间,而不会占用物理内存
- 对内存扩大了,所以gc中判断对象总数与堆内存的比例的时候,就不会触发GC
2.通过 debug.SetGCPercent(xxx) 这个函数来动态调整百分比