作者:張富春(ahfuzhang),轉載時請注明作者和引用鏈接,謝謝!
我直接說說核心原理:
- 程序一開始,分配很大一塊堆內存,以此來擴大heap區域
- 在main()函數一開始的地方分配大內存
- 具體代碼為 xx := make([]byte, 102410241024*10)
- 這個內存在程序運行期不釋放
- 這個內存在程序運行期也不使用
- 因為不使用,所以分配的大內存占了很大的虛地址空間,而不會占用物理內存
- 對內存擴大了,所以gc中判斷對象總數與堆內存的比例的時候,就不會觸發GC
2.通過 debug.SetGCPercent(xxx) 這個函數來動態調整百分比