如何在 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 中花费了多少时间。
如何禁用 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 中花费了多少时间。