如何禁用GC,或大幅降低GC的频率?
就像为某些巨大的堆或分配大小赋予它+RTS
选项一样?
我希望看到我的程序在没有GC发生时的行为。
答案 0 :(得分:17)
(在freenode的#ghc卡特的帮助下)
没有完全禁用GC的开关。而是使用以下所有+RTS
运行时选项:
-I0
禁用空闲时间垃圾回收。-A100G
,因为只有在分配区域已满时才会执行GC。有关这些选项的说明,请参阅https://downloads.haskell.org/~ghc/7.8-latest/docs/html/users_guide/runtime-control.html。
请注意,您将快速耗尽RAM。
答案 1 :(得分:1)
结合nh2和Thomas的答案,我取得了不错的成绩
+RTS -I0 -A90G -G1 -m1 -RTS
我有100 GB的RAM,所以我认为90G
是一个不错的分配区域。
我还使用System.Mem.performGC
在适当的位置手动触发GC,并使用GHC.Stats
跟踪在GC中花费了多少时间。