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

Rub*_*mar 11 ruby garbage-collection memory-management objectspace

Ruby-doc有这样的描述:

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

ObjectSpace还为对象终结器提供支持,当特定对象即将被垃圾回收销毁时将调用这些过程.

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

Ben*_*son 7

垃圾收集器与管理存储器语言的构建体.这是管理记忆的事情.从本质上讲,垃圾收集器的工作是弄清楚何时不再需要已经分配的内存,并释放它.

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

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

ObjectSpace使您可以访问这种性质的东西.从本质上讲,它是一种访问任何当前使用已分配内存的东西的方法.


dem*_*mas 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
Run Code Online (Sandbox Code Playgroud)

我知道类变量,它只是用法的例子.每次要对类的每个实例执行某些操作时,它都很有用.