如何禁用GHC Haskell中的垃圾收集?

时间:2015-04-09 15:37:44

标签: haskell ghc

如何禁用GC,或大幅降低GC的频率?

就像为某些巨大的堆或分配大小赋予它+RTS选项一样?

我希望看到我的程序在没有GC发生时的行为。

2 个答案:

答案 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中花费了多少时间。