一個神奇的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) 這個函數來動態調整百分比


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM