Am einfachsten ist es, die Optionen -Xloggc
und -XX:-PrintGCTimeStamps
beim Start Ihrer JVM zu verwenden. Ich denke, es gibt aus, wie lange die Müllsammlung dauert.
Ich denke, wenn GC (Garbage Collector) arbeitet, stoppt die Anwendung und wird fortgesetzt, wenn GC beendet wird.
Ich glaube nicht, dass das eine sichere Annahme ist. Sind Sie sicher, dass der Garbage Collector nicht parallel mit Ihrem Anwendungscode arbeitet?
Um die Zeit zu messen, die beim Sammeln von Müll aufgewendet wurde, können Sie die Müllsammler MXBean .
Versuchen Sie Folgendes:
%Vor% Eine weitere praktische Lösung ist die Ausführung von jstat -gc
( Dokumentation ) ) gegen Ihren Prozess, wenn Ihre Tests abgeschlossen sind. Dadurch erhalten Sie eine gute Gesamtausgabe der genauen Zeit, die Sie während der Lebensdauer Ihrer JVM in GC verbracht haben.
Diese Leistungsmetrik wird von der JVM aufgezeichnet und über JMX zugänglich gemacht. Stellen Sie für die interaktive Überwachung eine Verbindung zur laufenden JVM mit JConsole her, und auf der Registerkarte "VM-Zusammenfassung" wird etwa Folgendes angezeigt:
Garbage Collector: Name = 'Kopieren', Sammlungen = 26, Gesamtzeit = 0,183 Sekunden Müllsammler: Name = 'MarkSweepCompact', Sammlungen = 2, Gesamtzeit = 0,168 Sekunden
Sie können JMX auch programmatisch abfragen.
Aktivieren Sie Garbage Collection-Protokolle. Als dokumentiert können Sie -verbose:gc
, -XX:+PrintGCDetails
und -XX:+PrintGCTimeStamps
Flags. -Xloggc
flag kann verwendet werden, um diese in eine Datei zu leiten.
Die resultierenden Protokolle sind für Menschen lesbar, aber für die meisten Vorteile möchten Sie wahrscheinlich, dass sie durch einen Analysator laufen. Solche Tools sind in diesem Thema aufgelistet.
Es gibt verschiedene GC-Algorithmen, die sich unterschiedlich verhalten. Ich habe kürzlich einen guten Artikel gelesen Thema, das ich empfehlen kann, wenn Sie mehr wissen möchten.
Sie können Ihre Anwendung mit den folgenden Befehlszeilenoptionen -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails
starten und Informationen über GC erhalten.
Hier ist ein Beispiel für die Protokollnachricht:
2012-12-17T03: 02: 15.590-0500: [GC [PSYoungGen: 40934K- & gt; 2670K (29440K)] 48211K- & gt; 14511K (73152K), 0,5745260 Sekunden] [Times: user = 0,08 sys = 0,01, real = 0,58 Sekunden]
Ähnlich wie @steve McLeods Antwort, die ManagementFactory verwendet Seit Java 8 kann dies auch mit in einer Zeile geschrieben werden Java-Streams :
%Vor%Tags und Links java garbage-collection performance qa jvm