11

Ruby-doc 有这样的描述:

ObjectSpace 模块包含许多与垃圾收集工具交互的例程,并允许您使用迭代器遍历所有活动对象。

ObjectSpace 还提供对对象终结器的支持,当特定对象即将被垃圾回收销毁时,将调用它们。

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

4

3 回答 3

7

垃圾收集器是一种具有托管内存的语言结构。它是管理内存的东西。本质上,垃圾收集器的工作是找出一块已分配的内存何时不再需要,并释放它。

当您使用带有垃圾收集器的语言时,您可能想要做一些事情:

  1. 每当释放一块内存时运行一个方法
  2. 计算当前占用内存的类的所有实例
  3. 计算所有类的所有实例

ObjectSpace 使您可以访问做这种性质的事情。从本质上讲,它是一种访问当前正在使用分配内存的任何事物的方法。

于 2011-02-25T09:40:05.503 回答
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

我知道类变量,这只是使用示例。每当您想对类的每个实例执行某些操作时,它都会很有用。

于 2011-02-25T09:34:43.113 回答
2

的实际用法ObjectSpace派生 Exceptions 的完整类层次结构

于 2011-02-25T17:03:12.770 回答