我应该如何推断GC何时运行?

3

我正在编写一个静态编译语言,并希望支持垃圾回收。在设计之前,我想知道如何推断何时应该运行GC?

是在每个16MB分配间隔后运行吗?(在足够的上升之后检查或者在分配16MB+之前检查)。是否有一种情况要更早地检查,以便循环可以重复使用相同的内存以提高效率?等等。

1个回答

2
一个 GC 最好运行的时机可能是 "程序有一些空闲时间"。例如,如果您有一个运行循环并且没有事件排队,那么现在可能是运行 GC 的好时机。然后,如果 GC 分配器注意到它需要向操作系统请求更多内存,也可以考虑运行 GC。我认为这还取决于 GC 的设计,例如:可以设计一个在自己的线程中运行且不中断程序的 GC,与通常的 "停止世界" GC 相反。
问题也是,您是想实现一个 GC 来学习吗?还是只是想要一个 GC?在后一种情况下,我建议您看看 Boehm GC。

当程序有一些时间剩余时,听起来像是睡眠和互斥锁。我喜欢你提到了Boehm GC。我目前输出C++代码,添加这个似乎很简单。我既想学习,也只是想要一个GC。我不想编写一个GC或者关心它有多好,但我确实想知道它是如何工作的。如果到处都是大量的小分配,需要长时间排序,那么我可以看到一些时间剩余会出现问题。 - user34537

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