Ruby垃圾收集

ker*_*lin 25 ruby garbage-collection

你什么时候在Ruby程序中使用这个垃圾收集方法?

GC.start
Run Code Online (Sandbox Code Playgroud)

tad*_*man 22

有时候需要开始它,但通常它本身工作正常.我有一种情况,如果不加以控制,应用程序将咀嚼1GB内存,深入交换,GC.start间歇性触发会将其削减至100MB.

问题是调用这种方法非常昂贵,如果积极使用,可能会大大降低应用程序的速度.


Nat*_*ong 17

何时进行基准测试

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

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

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

without_gc do
  Benchmark.measure { some_code }
end
Run Code Online (Sandbox Code Playgroud)

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


Sud*_*han 14

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


sea*_*and 7

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