ObjectSpace - что это такое и как люди его используют?

Ruby-doc имеет это описание:

Модуль ObjectSpace содержит количество подпрограмм, которые взаимодействуют с объект сбора мусора и позволят вам пройти все живые объекты с итератором.

ObjectSpace также обеспечивает поддержку финализаторы объектов, которые будут когда конкретный объект чтобы уничтожить сбор мусора.

Может ли кто-нибудь объяснить это на более простом языке, если нет, по крайней мере предоставить информацию о том, где это используется?

Ответ 1

A сборщик мусора является конструкцией на языках с управляемой памятью. Это то, что управляет памятью. По сути, это задача сборщика мусора, чтобы выяснить, когда часть памяти, которая была выделена, больше не нужна и освобождает ее.

Когда вы используете язык с сборщиком мусора, есть определенные вещи, которые вы, возможно, захотите сделать:

  • Выполнить метод всякий раз, когда освобождается часть памяти.
  • Подсчитайте все экземпляры класса, которые в настоящее время занимают память
  • Подсчитать все экземпляры всех классов

ObjectSpace предоставляет вам доступ к таким вещам. По сути, это способ получить доступ ко всему и всему, что в настоящее время использует выделенную память.

Ответ 2

Например, чтобы подсчитать количество экземпляров некоторого класса:

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

Я знаю о переменных класса, бит - это только пример использования. Это может быть полезно каждый раз, когда вы хотите выполнить какое-либо действие для каждого экземпляра класса.