ObjectSpace - 它是什么以及人们如何使用它?

时间:2011-02-25 09:08:10

标签: ruby memory-management garbage-collection objectspace

Ruby-doc有这样的描述:

  

ObjectSpace模块包含一个   与之交互的例程数量   垃圾收集设施和   让你遍历所有生活   具有迭代器的对象。

     

ObjectSpace也提供支持   对象终结者,即将进行的触发   在特定对象的时候调用   被垃圾收集摧毁。

任何人都可以用更简单的语言解释这一点,如果没有,至少提供有关使用方法的信息吗?

3 个答案:

答案 0 :(得分:7)

garbage collector是具有托管内存的语言的构造。这是管理记忆的事情。从本质上讲,垃圾收集器的工作是弄清楚何时不再需要已经分配的内存,并释放它。

当您使用带有垃圾收集器的语言时,您可能需要执行某些操作:

  1. 每当释放一块内存时运行方法
  2. 计算当前占用内存的类的所有实例
  3. 计算所有类的所有实例
  4. ObjectSpace让您可以访问这种性质的东西。从本质上讲,它是一种访问任何当前使用已分配内存的东西的方法。

答案 1 :(得分:6)

例如,要计算某个类的实例数:

class Examp
  def self.obj_count
    count = 0
    ObjectSpace.each_object(self) do |b|
      count += 1
    end

    return count
  end
end

a = Examp.new
b = Examp.new
c = Examp.new

puts Examp.obj_count #=> 3

我知道类变量,它只是用法的一个例子。每当你想对每个类的实例执行某些操作时,它都会很有用。

答案 2 :(得分:2)

ObjectSpace的真实用途是derive the full class hierarchy of Exceptions