2012-12-10 16 views
7

C'è qualche funzione nel rubino, per trovare la memoria usata dall'oggetto rubino.
Simile a come C ha la funzione sizeof() e PHP ha la funzione memory_get_usage(). Il rubino ha una funzione/metodo equivalente?Come trovare la memoria usata dall'oggetto ruby?

+4

Probabilmente un duplicato: http://stackoverflow.com/questions/3973094/how-to-measure-the-size-of-a-ruby-object – Matt

+0

@Matt - Grazie. –

+1

Sono curioso: qual è lo scopo della tua domanda? Vuoi essere in grado di conoscere la dimensione di un oggetto o stai cercando di capire quanta memoria avrà un numero elevato di determinati oggetti? – Sim

risposta

2

Questo è un tratto, ma se il tuo obiettivo è quello di cercare una perdita di memoria, piuttosto che vedere le dimensioni dei singoli oggetti, si potrebbe guardare object_count(cls), come in:

>> ObjectSpace.each_object(Object).count 
=> 114629 
>> ObjectSpace.each_object(Array).count 
=> 10209 

ecc FWIW, simboli sono un po 'diverso: è possibile ottenere il conteggio dei simboli tramite:

>> Symbol.all_symbols.count 
=> 17878 

per scoprire se si dispone di una perdita di no, è possibile chiamare manualmente GC, contare gli oggetti, eseguire il codice per un po', chiama di nuovo GC, quindi verifica se il numero di oggetti è cresciuto in modo significativo.

Ovviamente, questo non indica la dimensione di ciascun oggetto, solo il numero di ciascuna classe assegnata.

C'è anche memprof, ma ammetto che non l'ho ancora usato.

+0

Questo è il numero di oggetti in memoria. La domanda originale, a quanto ho capito, si chiede come scoprire l'utilizzo della memoria (in byte) di un singolo oggetto. – Ariejan

+0

@ Ariejan: completamente d'accordo. Ecco perché ho detto "* se * il tuo obiettivo è cercare una perdita di memoria, piuttosto che vedere la dimensione dei singoli oggetti ..." –

Problemi correlati