高效,可靠的活动对象计数

时间:2009-08-19 15:49:40

标签: ruby memory garbage-collection

是否有一种机制可以获取Ruby环境中活动对象数量的可靠值?我找到了几种产生答案的方法,通常它们类似于:

c = 0   
ObjectSpace.each_object { c += 1 }

这个不幸的问题是,有很多Fixnum对象只是为了制表而创建,更不用说ObjectSpace方法本身的明显开销了。

当然可以根据类过滤结果并简单地忽略Fixnum对象,但这似乎是一个不完美的解决方法,因为它假设了each_object的工作原理。

我想找到一种机制,用于确定在操作期间一个点与另一个点之间产生多少垃圾,因为可以关闭垃圾收集器以进行诊断以提供准确的基准。

1 个答案:

答案 0 :(得分:2)

我没有看到使用内核或GC直接执行此操作的方法。 Rails尝试在基准测试时执行此操作 - 请参阅source code for active_support/testing/performance.rb。不幸的是,看起来所有这些方法都需要修补的Ruby解释器。

RubyProf文档可能也很有用;这是Rails尝试使用的方法之一。如果您应用补丁(不知道在哪里找到它),您应该能够:

RubyProf.measure_allocations; RubyProf::ALLOCATIONS