11

Ruby-docには次の説明があります。

ObjectSpaceモジュールには、ガベージコレクション機能と対話し、イテレータを使用してすべての生きているオブジェクトをトラバースできるようにする多数のルーチンが含まれています。

ObjectSpaceは、特定のオブジェクトがガベージコレクションによって破棄されようとしているときに呼び出されるオブジェクトファイナライザー(proc)のサポートも提供します。

誰かがこれをより簡単な言語で説明できますか?そうでない場合は、少なくともこれが使用されている場所に関する情報を提供できますか?

4

3 に答える 3

7

ガベージコレクターは、マネージドメモリを備えた言語の構造です。それは記憶を管理するものです。基本的に、割り当てられたメモリの一部が不要になったときを把握し、割り当てを解除するのはガベージコレクタの仕事です。

ガベージコレクターを備えた言語を使用している場合、実行したいことがいくつかあります。

  1. メモリの一部が解放されるたびにメソッドを実行します
  2. 現在メモリを使用しているクラスのすべてのインスタンスをカウントします
  3. すべてのクラスのすべてのインスタンスをカウントします

ObjectSpaceを使用すると、この種のことを実行できます。基本的に、これは、割り当てられたメモリを現在使用しているすべてのものにアクセスする方法です。

于 2011-02-25T09:40:05.503 に答える
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

クラス変数については知っていますが、それは使用例にすぎません。クラスの各インスタンスに対して何らかのアクションを実行したいときはいつでも便利です。

于 2011-02-25T09:34:43.113 に答える
2

の実際の使用法は、 Exceptions の完全なクラス階層ObjectSpaceを導出することです。

于 2011-02-25T17:03:12.770 に答える