>> 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}
>>
Guardando l'oggetto T_CLASS
possiamo vedere che questi sono i conteggi. Quando rimuovo la classe e avvio il Garbage Collector, riduce nuovamente il conteggio.
Il valore TOTALE rimanente invariato non può significare che non siano stati creati oggetti, poiché ovviamente quando si crea un nuovo oggetto come MyClass il conteggio non è cambiato. Potrebbe significare che rivaluta il totale solo occasionalmente, non in tempo reale.
Ma, con un po 'di matematica, quando somma i valori e rimuovo il conteggio TOTALE, ottengo TOTAL. Quindi sembra che sia un conteggio del numero di oggetti, che ha senso, quando i rapporti count_objects
sul conteggio degli oggetti.
Possibile duplicato di [Su Ruby 1.9, quali sono i significati delle chiavi hash quando si chiama ObjectSpace.count \ _objects (in particolare: FREE,: T \ _ICLASS,: T \ _DATA e: T \ _NODE)?] (https://stackoverflow.com/questions/3789929/on-ruby-1-9-what-are-the-meanings-of-the-hash-keys-when-calling-objectspace-cou) –