我如何禁用垃圾回收器,或大幅减少垃圾回收的频率?
比如给它一个+RTS
选项,设置一个巨大的堆或分配大小?
我想看看我的程序在没有垃圾回收时的行为。
(在freenode的#ghc频道中得到了来自carter的帮助)
没有完全禁用GC的开关。 相反,使用以下所有+RTS
运行时选项:
-I0
禁用空闲时间垃圾收集。-A100G
,因为只有在分配区域满时才会进行GC。请参阅 https://downloads.haskell.org/~ghc/7.8-latest/docs/html/users_guide/runtime-control.html 以获取有关这些选项的说明。
请注意,您的RAM将很快耗尽。
我将nh2和Thomas的答案结合起来,取得了不错的成果。
+RTS -I0 -A90G -G1 -m1 -RTS
90G
是一个很好的分配区域大小。System.Mem.performGC
在适当的时候手动触发GC,并使用GHC.Stats
跟踪已经在GC中花费了多少时间。
-c
开关,切换到一个代 (-G
), 并降低所需的空闲空间量 (-mN
)。 - Thomas M. DuBuisson