2013-04-17 15 views
8

Ich habe eine sehr leistungsabhängige Anwendung in Java. (Ich weiß, dass ich eigentlich C oder etwas anderes benutzen sollte. Aber jetzt ist es Java.) Ich versuche zu vermeiden, Objekte zu erschaffen und wegzuwerfen. Jetzt muss ich wissen, wie viel Müll noch gesammelt wird.Java Garbage Collection Zeit?

Wie kann ich herausfinden?

Wenn möglich, möchte ich eine Art Nummer in Millisekunden oder Nanosekunden haben, die keine Installation von mehr Software erfordert.

+0

Nur ein Heads-up das C ist nicht besser als Java - es hängt davon ab, wie Sie sie vergleichen. [Dies ist ein guter Vergleich, den ich gefunden habe] (http://www.azusystem.com/blog/click/2009-09-06-java-vs-c-performanceagain), die Quintessenz ist, dass C ist besser als Java für Speicherresonanz und für numerisch intensive Programme, während Java eine bessere Multithreading-Unterstützung bietet. Ein Forschungspapier, das ich vor einigen Jahren gelesen habe, ergab, dass (wenn man den Java-Heap auf das Vierfache der Größe des C-Heaps wachsen ließ), für viele SourceForge-Programme kein Leistungsunterschied zwischen den beiden Sprachen bestand. –

+0

möglich Duplikat [Tuning Garbage Collection für niedrige Latenz] (http://stackoverflow.com/questions/2781797/tuning-garbage-collections-for-low-latency) –

Antwort

2

können Sie VisualVm für diese, es ist genau das, was Sie brauchen.
Wie Sie unten Sie GC-Aktivität haben, die ist sehr nützlich, sehen:

enter image description here

Neben der GC Aktivität Sie viele Details haben es wie:

Heap-Nutzung, CPU-Auslastung, Objektinstanzen Nutzung usw.
7

können Sie Tools wie VisualVM verwenden Anwendungsaktivität zu überwachen. Stellen Sie sicher, dass Sie geeignete GC-Algorithmen verwenden.

Oracle JVM bietet mehrere Arten von Garbage Collectors:

  • Der Durchsatz Kollektor
  • Die gleichzeitige Nieder Pause Kollektor
  • Die inkrementale (manchmal auch als Zug) niedriger Pause Kollektor:

Lesen Sie mehr über diese Sammler here.

+0

+1 schönen Vorschlag über Kollektortypen :) – Stephan

+2

+1 Hinweis: Bei Programmen mit geringem GC-Wert erstellt VisualVM mehr Müll als Ihre Anwendung. Dazu nutze ich YourKit, welches nicht kostenlos ist. Ich würde mit VisualVM beginnen. –

+0

Es gibt auch ein Plugin für VisualVM namens VisualGC, das anzeigt, was für jeden Heap-Space in Echtzeit passiert. https://blogs.oracle.com/klc/entry/visualgc_plugin_for_visualvm – Aaron

1

Jprofiler, die sowohl Speicher-Profil ermöglicht die Speicherauslastung und dynamische Zuweisung Lecks und CPU Profilierung bewerten zu Thema Konflikte zu bewerten.

7

Oder Sie können JVM lassen Sie die GC-Aktivität drucken .. Diese Einstellungen habe ich:

-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Xloggc:logs/gc.log 

GC-Aktivität in einer Datei gedruckt wird logs/gc.log ..