2010-08-21 18 views
6

Ich verwende derzeit VisualVM, aber das Problem, das ich habe ist, dass ich die Grafiken nicht speichern kann, die es generiert. Ich muss einige Daten über die Speichernutzung und die Laufzeit melden, obwohl die Laufzeit mit System.nanoTime() leicht zu erreichen ist. Ich habe auch versucht, die NetBeans Profiler, aber es ist nicht das, was ich will, da ich nicht nach bestimmten Teilen suchen, die es verlangsamen würde oder so etwas, so wäre das Overkill. Das größte Problem ist, dass es zu viel Verarbeitungszeit kostet. Außerdem kann ich die Daten nicht einfach erfassen/übertragen, wie VisualVM, zumindest soweit ich das beurteilen kann.Der beste Weg, die Speicherauslastung eines Java-Programms zu messen?

Im Idealfall wäre ein Methodenaufruf die beste Methode, da ich dann die Informationen viel einfacher abrufen kann, aber alles wie VisualVM, mit dem ich die Grafik tatsächlich speichern kann, ist in Ordnung. Die Leistung mit VisualVM ist im Vergleich zum NetBeans-Profiler auch ziemlich gut, obwohl ich vermute, dass ich den Profiler nicht verwendet habe.

Ich benutze derzeit Ubuntu, aber Windows 7 ist in Ordnung. Ich hätte lieber ein Programm, das darauf spezialisiert ist, da die Informationen von Programmen, die das nicht tun, wahrscheinlich die JVM und andere Dinge enthalten, die besser ausgelassen würden.

Nun, anscheinend können Sie Snapshots der aktuellen Sitzung speichern und maximieren das Fenster in VisualVM, so dass Sie die Diagramme größer machen, einen Schnappschuss machen und sie schneiden ... Aber das ist eine Art Hack. Bessere Vorschläge willkommen.

Antwort

0

Versuchen Sie JProfiler. Obwohl es nicht kostenlos ist, können Sie zuerst die Testversion ausprobieren.

3

Betrachten Sie die Klasse Runtime. Es hat freeMemory, maxMemory und totalMemory. Das ist wahrscheinlich nah genug für Ihre Zwecke.

0

Die Konsole HPjmeter ist kostenlos. Führen Sie Ihren Java-Prozess mit -Xloggc:<file> aus und öffnen Sie damit den <file>. Sie können nicht nur Ihre Sitzungen speichern, sondern auch Läufe vergleichen. Weitere Optionen zu prüfen, in der Befehlszeile inklusive sind:

-XX:+PrintGCTimeStamps 
-XX:+PrintGCDetails 
2

Sie können anmutige Methode bevorzugen Speicher zu messen, anstatt zu hacken Bild. JConsole ist bekannt, um Anwendungen von JMX zu überwachen, bietet es Programm-API. Ich schätze es ist was du brauchst.

See: Using JConsole to Monitor Applications

15
Runtime.getRuntime().freeMemory(); 

Runtime.getRuntime().totalMemory();