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?
Antwort
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.
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
@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 ..." –
- 1. Kommandozeile, um den von Prozess verwendeten Speicher
- 2. Zeigt Instruments den von UIWebView verwendeten Speicher an?
- 3. Wie finde ich alle in einer PHP-Datei verwendeten Klassen?
- 4. Wie finde ich welchen Prozess Speicher ausläuft
- 5. Wie überprüfe ich den von einem ActiveX-Steuerelement im IE verwendeten Speicher?
- 6. Wie finde ich den Speicherort der derzeit verwendeten MySQL-Konfigurationsdatei in Linux
- 7. Wie finde ich den Wert von $ CATALINA_HOME?
- 8. Wie finde ich den Offset von st_link?
- 9. Von der in IIS gehosteten WCF-Anwendung verwendeten Speicher abrufen?
- 10. Wie finde ich den Dateisystemtyp in Python
- 11. Wie finde ich den Standort des Benutzers?
- 12. Wie kann ich den von mvc verwendeten Jaxb2Marshaller konfigurieren: annotation-driven
- 13. Wie finde ich den Speicherort des Scratchpuffers?
- 14. Wie kennt jQuery FadeIn den verwendeten Anzeigemodus?
- 15. Wie kann ich den JVM-Speicher erhöhen?
- 16. Wie finde ich den Systemtyp mit Python?
- 17. Wie finde ich den Variablentyp in JavaScript?
- 18. Wie finde ich den Ruby-Interpreter?
- 19. Wie finde ich den Namen eines Betriebssystems?
- 20. Wie finde ich den Bildnamen mit jquery?
- 21. Wie finde ich den aktuellen ausführbaren Dateinamen?
- 22. Wie finde ich den aktuellen Überlaufprüfkontext heraus?
- 23. Subversion: Wie finde ich den Buggy Commit?
- 24. Wie finde ich heraus, ob der mysql-Index vollständig in den Speicher passt?
- 25. Wie finde ich den Speicherort von Python-Modulquellen?
- 26. Wie finde ich den gemeinsamen Pfad einer Liste von Pfaden?
- 27. Wie finde ich den Funktionsnamen von namespaced Konstruktoren in Javascript?
- 28. Wie finde ich den Winkel von Nicken, Rollen und Gieren?
- 29. Wie finde ich den Mittelpunkt einer Reihe von geografischen Punkten?
- 30. Wie finde ich den Punkt NSInvalidArgumentException von NSArray?
Wahrscheinlich ein Duplikat: http://stackoverflow.com/questions/3973094/how-to-measure-the-size-of-a-ruby-object – Matt
@Matt - Danke. –
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