19

关于我的另一个问题Haskell 集合是否保证每个操作的最坏情况界限?,我很好奇:垃圾回收会造成多长时间的停顿?

Haskell 是否使用某种增量垃圾收集,以便程序一次只停止一小段时间,或者在极端情况下它可以停止几秒钟?

我找到了两篇 SPJ 关于这个主题的论文: https ://research.microsoft.com/en-us/um/people/simonpj/papers/non-stop/index.htm 。但是如果这些想法实际上被 GHC(或其他 Haskell 实现)采用,我没有找到参考。

4

1 回答 1

24

GHC 是为计算吞吐量而设计的,而不是延迟。因此,GHC 使用带有线程局部堆的分代、多线程垃圾收集器。线程本地对象的垃圾收集不会停止其他线程。全局堆偶尔的major GC会暂停所有线程。

通常,暂停时间为几毫秒,但不能保证延迟。

您可以通过几个运行时标志(例如 gc-I间隔)来控制 GC 的频率。

于 2012-09-13T11:15:57.143 回答