ObjectSpace - что это такое и как люди его используют? - PullRequest
11 голосов
/ 25 февраля 2011

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 25 февраля 2011

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

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

  1. Запускать метод всякий раз, когда освобождается часть памяти
  2. Подсчитать все экземпляры класса, которые в данный момент занимают память
  3. Подсчитать все экземпляры всех классов

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

6 голосов
/ 25 февраля 2011

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

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

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

2 голосов
/ 25 февраля 2011

Реальное использование ObjectSpace для получения полной иерархии классов исключений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...