【问题标题】:What's the Gambit-C's GC mechanism?Gambit-C 的 GC 机制是什么?
【发布时间】:2011-06-11 18:40:12
【问题描述】:

Gambit-C 的 GC 机制是什么?我对制作交互式应用程序感到好奇。我想知道它是否可以避免突发GC操作。

【问题讨论】:

  • 归根结底,它只是归结为用户体验——只要没有用户明显暂停...
  • dynamo.iro.umontreal.ca/~gambit/wiki/index.php/… 似乎表明正在使用引用计数,但这是 2007 年的一些注释(这意味着在这些情况下可以立即释放)。
  • @pst 是软实时应用的结果吗?如果它使用立即引用计数,它如何正确处理循环引用?
  • 我不使用 Gambit-C,这只是我能找到的所有信息,我什至不确定它是否直接适用——最好的办法是询问 ML 或查看我认为的来源:(现代引用计数系统(例如 CPython 和 PHP)使用额外的循环检测/中断阶段来处理循环引用。引用计数的一个好处是可以立即执行取消分配,从而摊销(即使从长远来看效率较低)。对于大多数“交互式”应用程序,现代 Mark & Sweep / Hybrid GC 没有问题(例如 .NET/JVM),甚至还有一个软实时 JVM。

标签: garbage-collection scheme gambit


【解决方案1】:

根据这些线程:

Gambit 至少在 2008 年 9 月之前都有传统的 stop-the-world GC。线程中的人们建议使用预分配对象池来避免 GC 操作本身。我不知道当前的实现。

*很难同意谈话。因为我不能池化不是我自己写的对象,最终完全 GC 会在某个时候通过累积的小/非池化临时对象发生。但是@Gregory 提到的方法可能有助于避免这个问题。但是,我希望将增量 GC 添加到 Gambit :)

【讨论】:

    【解决方案2】:

    根据http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Debugging#Garbage_collection_threshold gambit 有一些控制:

    垃圾回收阈值

    注意运行时选项 h(最大堆大小,以千字节为单位)和 l(livepercent)。有关详细信息,请参阅参考手册。将 livepercent 设置为 5 意味着垃圾收集将在分配给应该被垃圾收集的对象的内存是分配给不应该被垃圾收集的对象的内存的 19 倍时进行。存在 livepercent 选项的原因是,提供一种方法来控制垃圾收集器在内存消耗方面的节省/慷慨程度,以及它在 CPU 负载中的重/轻。

    您始终可以通过 (##gc) 强制进行垃圾回收。

    如果您在少量操作后强制进行垃圾收集,或者连续安排它,或者将 livepercent 设置为 90 左右,那么 gc 可能会频繁运行,并且每次运行都不会做很多事情。总体而言,这可能会更昂贵,但要避免费用激增。然后,您可以相当轻松地预算这笔费用,以加快服务速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-02
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多