什么是Gambit-C的GC机制?我对此很感兴趣,因为我要制作交互式应用程序。我想知道它是否可以避免突发GC操作。
什么是Gambit-C的GC机制?我对此很感兴趣,因为我要制作交互式应用程序。我想知道它是否可以避免突发GC操作。
Gambit至少在2008年9月之前采用传统的停止-世界垃圾回收。线程中的人们建议使用预分配的对象池来避免垃圾回收操作本身。我找不到当前实现的相关信息。
*很难同意这段对话。因为我无法池化未由自己编写的对象,最终会有小型/非池化临时对象累积导致完全垃圾回收。但@Gregory提到的方法可能有助于避免这个问题。然而,我希望Gambit能添加增量GC :)
根据http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Debugging#Garbage_collection_threshold,Gambit有一些控制:
如果您在执行一些少量操作后强制进行垃圾回收,或者几乎连续地安排它,或者将livepercent设置为90之类的值,那么假定垃圾回收将频繁运行,并且每次运行都不会做太多工作。这可能会导致总体上更昂贵,但避免了突发性的开销。然后,您可以相当容易地预算这种开销,以使服务快速运行。垃圾回收阈值
注意运行时选项h(最大堆大小,以千字节为单位)和l(livepercent)。有关更多信息,请参见参考手册。将livepercent设置为5意味着在分配给应该进行垃圾回收的对象的内存比分配给不应该进行垃圾回收的对象的内存多19倍的时间进行垃圾回收。 livepercent选项存在的原因是为了提供一种控制垃圾收集器在内存消耗方面应该多么节约/慷慨,以及在CPU负载方面应该多么重/轻的方法。
您始终可以通过(##gc)强制进行垃圾回收。