如何在GHC Haskell中禁用垃圾回收?

13

我如何禁用垃圾回收器,或大幅减少垃圾回收的频率?

比如给它一个+RTS选项,设置一个巨大的堆或分配大小?

我想看看我的程序在没有垃圾回收时的行为。

2个回答

17

(在freenode的#ghc频道中得到了来自carter的帮助)

没有完全禁用GC的开关。 相反,使用以下所有+RTS运行时选项:

  • 使用-I0禁用空闲时间垃圾收集。
  • 将“幼儿园”==“分配区域”的大小设置为非常大的值,例如-A100G,因为只有在分配区域满时才会进行GC。

请参阅 https://downloads.haskell.org/~ghc/7.8-latest/docs/html/users_guide/runtime-control.html 以获取有关这些选项的说明。

请注意,您的RAM将很快耗尽。


8
好的...你可能很快就会用完内存,但并不是每个人都会。 ;-). 此外,您可以通过标记-清除方式消除复制收集,使用-c开关,切换到一个代 (-G), 并降低所需的空闲空间量 (-mN)。 - Thomas M. DuBuisson

1

我将nh2和Thomas的答案结合起来,取得了不错的成果。

+RTS -I0 -A90G -G1 -m1 -RTS

我有100GB的RAM,所以我认为90G是一个很好的分配区域大小。
我还使用System.Mem.performGC在适当的时候手动触发GC,并使用GHC.Stats跟踪已经在GC中花费了多少时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接