ObjectSpace - что это такое и как люди его используют?
Ruby-doc имеет это описание:
Модуль ObjectSpace содержит ряд подпрограмм, которые взаимодействуют со средством сбора мусора и позволяют обходить все живые объекты с помощью итератора.
ObjectSpace также обеспечивает поддержку финализаторов объектов, процедур, которые будут вызываться, когда определенный объект собирается уничтожить сборщиком мусора.
Может кто-нибудь объяснить это на более простом языке, если нет, по крайней мере, предоставить информацию о том, где это используется?
3 ответа
Сборщик мусора - это конструкция на языках с управляемой памятью. Это то, что управляет памятью. По сути, сборщик мусора должен выяснить, когда выделенная часть памяти больше не нужна, и освободить ее.
Когда вы используете язык со сборщиком мусора, вы можете захотеть сделать несколько вещей:
- Запускайте метод всякий раз, когда освобождается часть памяти
- Подсчитать все экземпляры класса, которые в настоящее время занимают память
- Подсчитать все экземпляры всех классов
ObjectSpace дает вам доступ к таким вещам. По сути, это способ получить доступ ко всему, что в настоящее время использует выделенную память.
Например, чтобы посчитать количество экземпляров некоторого класса:
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
Я знаю о переменных класса, но это только пример использования. Это может быть полезно каждый раз, когда вы хотите выполнить какое-либо действие в каждом экземпляре класса.
Реальное использование ObjectSpace
это получить полную иерархию классов исключений.