Ruby垃圾收集

时间:2011-05-20 03:26:04

标签: ruby garbage-collection

您何时会在Ruby程序中使用此垃圾收集方法?

GC.start

6 个答案:

答案 0 :(得分:22)

有时候有必要将其拉下来,但通常它本身就可以正常工作。我有一种情况,即如果不加以控制,应用程序将咀嚼1GB的内存,深入交换,触发GC.start间歇性地将其减少到100MB。

问题在于调用此方法非常昂贵,如果积极使用,可能会大大降低应用程序的速度。

答案 1 :(得分:16)

何时进行基准测试

我正在对一些创建大量对象的代码进行基准测试,我注意到我的基准测试变化很大。我确定尖峰来自在我的基准测试期间运行的垃圾收集

手动控制过程为我提供了更一致的基准。

def without_gc
  GC.start # start out clean
  GC.disable
  yield
  GC.enable
end

without_gc do
  Benchmark.measure { some_code }
end

那就是说,如果你反复运行,GC.start会导致显着的减速。

答案 2 :(得分:13)

我在内存受限环境(Heroku)上迭代大量项目时使用它 - 我每100个项目强制一个GC.start

答案 3 :(得分:7)

除非你有特殊需要,否则通常会气馁。防爆。有时在记忆分析期间强制gc以获得更好的可预测性是有用的。

答案 4 :(得分:0)

现实生活中的例子:

testing a JSON streamer当我想确保内存消耗仍然很低时。因此,我需要在测试用例之前运行GC.start,否则它们会变得不可预测,甚至会产生误报。

答案 5 :(得分:0)

当加载带有10万行的CSV时,这是必须的。否则,服务器将耗尽内存,并且不会加载数据。 参见https://stackoverflow.com/a/52722689/6594668