您何时会在Ruby程序中使用此垃圾收集方法?
GC.start
答案 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