2012-12-10 3 views
7

Gibt es eine Funktion in Ruby, um den von Ruby-Objekt verwendeten Speicher zu finden.
Ähnlich wie C hat die sizeof() Funktion und PHP hat die memory_get_usage() Funktion. Hat Ruby eine gleichwertige Funktion/Methode?Wie finde ich den von Ruby-Objekt verwendeten Speicher?

+4

Wahrscheinlich ein Duplikat: http://stackoverflow.com/questions/3973094/how-to-measure-the-size-of-a-ruby-object – Matt

+0

@Matt - Danke. –

+1

Ich bin neugierig: Was ist der Zweck Ihrer Frage? Möchten Sie die Größe eines Objekts wissen oder versuchen Sie herauszufinden, wie viel Speicher eine große Anzahl bestimmter Objekte benötigt? – Sim

Antwort

2

Dies ist eine Strecke ist, aber wenn Ihr Ziel für ein Speicherleck zu suchen, anstatt die Größe der einzelnen Objekte zu sehen, die Sie bei object_count(cls), wie in aussehen könnte:

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

usw. FWIW, Symbole sind ein wenig anders: Sie können die Anzahl der Symbole über bekommen kann:

>> Symbol.all_symbols.count 
=> 17878 

, wenn Sie ein Leck nicht haben, um herauszufinden, können Sie manuell GC aufrufen, Ihre Objekte zählen, führen Sie den Code für eine Weile, Rufen Sie GC erneut auf, und prüfen Sie, ob die Objektanzahl signifikant angestiegen ist.

Natürlich sagt dies nicht die Größe jedes Objekts, nur wie viele jeder Klasse zugeordnet sind.

Es gibt auch memprof, aber ich gebe zu, dass ich das noch nicht benutzt habe.

+0

Dies ist die Anzahl der Objekte im Speicher. Die ursprüngliche Frage, so wie ich sie verstehe, fragt nach der Speicherbelegung (in Bytes) eines einzelnen Objekts. – Ariejan

+0

@Ariejan: stimme voll und ganz zu. Deshalb habe ich gesagt: "Wenn dein Ziel darin besteht, nach einem Speicherleck zu suchen, anstatt die Größe einzelner Objekte zu sehen ..." –

Verwandte Themen