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

How to disable Garbage Collection in GHC Haskell?

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

比如给它一个 +RTS 选项来处理一些巨大的堆或分配大小?

我想看看我的程序在没有 GC 发生时的行为。

(在 freenode 上 #ghc 中卡特的帮助下)

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

  • 使用-I0禁用空闲时间垃圾收集。
  • 将 "nursery" == "allocation area" 大小设置为非常大的值,例如-A100G,因为GC只有在分配区满了才会进行

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

请注意,您将很快 运行 内存不足。

我将 nh2 和 Thomas 的答案结合到

中得到了很好的结果
+RTS -I0 -A90G -G1 -m1 -RTS

我有 100 GB 的 RAM,所以我认为 90G 是一个很好的分配区域大小。

我还使用 System.Mem.performGC to manually trigger GC at appropriate points and GHC.Stats 来跟踪在 GC 中花费了多少时间。