一个神奇的golang技巧:扩大heap内存来降低gc频率

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


具体的文章请看:https://web.archive.org/web/20210929130001/https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap-26c2462549a2/

我直接说说核心原理:

  1. 程序一开始,分配很大一块堆内存,以此来扩大heap区域
  • 在main()函数一开始的地方分配大内存
  • 具体代码为 xx := make([]byte, 102410241024*10)
  • 这个内存在程序运行期不释放
  • 这个内存在程序运行期也不使用
  • 因为不使用,所以分配的大内存占了很大的虚地址空间,而不会占用物理内存
  • 对内存扩大了,所以gc中判断对象总数与堆内存的比例的时候,就不会触发GC
    2.通过 debug.SetGCPercent(xxx) 这个函数来动态调整百分比

posted on 2022-02-28 12:00  ahfuzhang  阅读(814)  评论(0编辑  收藏  举报