【问题标题】:Is there some reason to call the Garbage Collector manually?是否有理由手动调用垃圾收集器?
【发布时间】:2016-07-18 19:39:16
【问题描述】:

有人可以给我一个例子,说明打电话GC.start 是个好主意吗?我正在阅读GC 类文档,但我无法想象使用它的好情况......

【问题讨论】:

  • 与大多数语言一样,强制垃圾回收通常被认为是糟糕的形式,即使这样做,您也只是强制它标记对象(不一定立即清理它们)。话虽如此,总有一种情况可能是有用的考虑因素,但这些情况通常很少见且非常具体。 (基准测试是我听说过的少数几个正常的之一,只是为了可预测性,可能会启动 GC,然后在基准测试之前禁用它)

标签: ruby garbage-collection mri


【解决方案1】:

仅在非常特殊的情况下,当您想要编写高性能代码并且您确切地知道自己在做什么时。

您必须注意,虽然垃圾收集器非常方便并且为开发人员省去了很多麻烦,但它总是比非垃圾收集器的实现慢 - 如果这些实现被正确开发的话。垃圾收集器会以一定的时间间隔中断您的程序,并在恢复程序之前进行清理。这些中断当然会导致延迟。所以如果你想挤出最后一点性能那么你可以考虑禁用自动垃圾收集并手动处理。

您也可以让垃圾收集器处于活动模式,并在任何关键操作之前手动触发它,希望它不会在此操作期间中断您的程序,因为它已经清理了。

但除非您绝对必须这样做,否则我不会干涉这些事情。在大多数情况下,延迟几乎不会引起注意,我想不出垃圾收集器有什么问题。它只是工作,是一个很好的工具。

【讨论】:

  • 哦。当您要求一个具体示例时:假设您想为机器人手臂开发一个软件,该软件可以用红宝石接球。现在,一旦球被抛出,您就可以计算轨迹并移动手臂来接住它。在这里,您可能应该在 catch 操作之前调用 GC.Start ,因为您不希望手臂在动作中间停止一瞬间 - 这可能会破坏 catch。但通常情况下,对于此类用例,您会完全关闭垃圾收集。
猜你喜欢
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2010-12-14
  • 2019-11-12
  • 2016-02-14
  • 2013-04-25
  • 1970-01-01
  • 2021-05-25
相关资源
最近更新 更多