Ruby GC :: Profiler没有输出

时间:2014-09-10 14:41:14

标签: ruby garbage-collection

我正在运行ruby脚本并尝试查看其中的GC统计信息,但输出只是空字符串。以下是我脚本的内容:

class NumberPool

  ...

  attr_accessor :sets

  def initialize
    @sets = []
  end

  def allocate
    allocated_number = Random.rand(min_bound..max_bound)
    sets.each do |set|
      next unless set.range.include?(allocated_number)
      return set.range.delete(allocated_number)
    end
    factor = allocated_number / batch_size
    min = factor * batch_size
    max = min + batch_size
    sub = SubPool.new(min, max)
    sub.range.delete(allocated_number)
    sets.push(sub)
    allocated_number
  end

  ...

def run_test
  GC::Profiler.enable

  a = NumberPool.new
  p a.allocate

  GC::Profiler.report
end

puts run_test

当我运行它时,输出为:

$ ruby number_pool.rb
1855532

我希望在标准输出中看到GC报告中的内容。

1 个答案:

答案 0 :(得分:0)

这是猜测,但GC可能没有触发(因为有足够的可用内存而无需收集垃圾)。

如果您通过添加GC.start强制GC会发生什么(修改代码如此):

   p a.allocate
   GC.start
   GC::Profiler.report