>> ObjectSpace.count_objects
=> {:TOTAL=>30205, :FREE=>131, :T_OBJECT=>1550, :T_CLASS=>921, :T_MODULE=>31, :T_FLOAT=>7, :T_STRING=>18368, :T_REGEXP=>185, :T_ARRAY=>4
196, :T_HASH=>254, :T_STRUCT=>1, :T_BIGNUM=>3, :T_FILE=>9, :T_DATA=>1311, :T_MATCH=>84, :T_COMPLEX=>1, :T_NODE=>3121, :T_ICLASS=>32}
>> class MyClass ; end
=> nil
>> ObjectSpace.count_objects
=> {:TOTAL=>30205, :FREE=>203, :T_OBJECT=>1562, :T_CLASS=>923, :T_MODULE=>31, :T_FLOAT=>7, :T_STRING=>18333, :T_REGEXP=>185, :T_ARRAY=>4
274, :T_HASH=>268, :T_STRUCT=>1, :T_BIGNUM=>3, :T_FILE=>9, :T_DATA=>1320, :T_MATCH=>97, :T_COMPLEX=>1, :T_NODE=>2956, :T_ICLASS=>32}
>> MyClass = nil
(irb):4: warning: already initialized constant MyClass
(irb):2: warning: previous definition of MyClass was here
=> nil
>> ObjectSpace.count_objects
=> {:TOTAL=>30205, :FREE=>87, :T_OBJECT=>1572, :T_CLASS=>923, :T_MODULE=>31, :T_FLOAT=>7, :T_STRING=>18425, :T_REGEXP=>185, :T_ARRAY=>43
39, :T_HASH=>279, :T_STRUCT=>1, :T_BIGNUM=>3, :T_FILE=>9, :T_DATA=>1328, :T_MATCH=>107, :T_COMPLEX=>1, :T_NODE=>2876, :T_ICLASS=>32}
>> MyClass
=> nil
>> GC.start
=> nil
>> ObjectSpace.count_objects
=> {:TOTAL=>30205, :FREE=>7356, :T_OBJECT=>1549, :T_CLASS=>921, :T_MODULE=>31, :T_FLOAT=>7, :T_STRING=>14100, :T_REGEXP=>184, :T_ARRAY=>
3821, :T_HASH=>244, :T_STRUCT=>1, :T_BIGNUM=>3, :T_FILE=>5, :T_DATA=>1285, :T_MATCH=>8, :T_COMPLEX=>1, :T_NODE=>657, :T_ICLASS=>32}
>>
T_CLASS
nesnesine bakarak bunların sayım olduğunu görebiliriz. Sınıfı çıkardığımda ve Çöp Toplayıcıyı başlattığımda, sayımı tekrar azaltır.
TOTAL değeri değişmeden kalır, sayımın değişmediği MyClass gibi yeni bir nesne oluşturduğunuzda hiç bir nesne oluşturulmadığı anlamına gelmez. Bu, sadece zaman zaman değil, gerçek zamanlı olarak tekrar değerlendirileceği anlamına gelebilir.
Ancak, biraz matematikle, değerleri topladığımda ve TOTAL sayısını kaldırdığımda, TOTAL alırım. Yani, nesnelerin sayısının, count_objects
nesnelerin sayısı hakkında rapor verdiği zaman, mantıklı olan sayıların sayısı gibi görünüyor.
Olası çoğaltılabilir [On Ruby 1.9, ObjectSpace.count \ _objects çağrılırken karma tuşların anlamları nedir (özellikle: FREE,: T \ _ICLASS,: T \ _DATA ve: T \ _NODE)?] (https://stackoverflow.com/questions/3789929/on-ruby-1-9-what-are-the-meanings-of-the-hash-keys-when-calling-objectspace-cou) –