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
Я знаю о переменных класса, бит - это только пример использования. Это может быть полезно каждый раз, когда вы хотите выполнить какое-либо действие для каждого экземпляра класса.
Ответ 3
В реальном мире ObjectSpace
используется выводить полную иерархию классов исключений.