Frage

Bitte lassen Sie mich wissen, was der beste Weg ist, Zusammensetzung der jungen Generation Speicher der alten Generation gefördert, um zu bestimmen, nach jedem jungen GC Ereignis?

Im Idealfall würde Ich mag Klassennamen kennen, die verantwortlich Mitsprache sind, für 80% der Haufen in jeder „jungen Generation -> alt gen“ Förderung Chunk;

Beispiel: Ich 600M junge gen haben, jede Amtszeit fördert 6M; Ich möchte wissen, welche Objekte komponieren dieses 6M.

Danke.

War es hilfreich?

Lösung

Es gibt keine einfache Möglichkeit, dies zu tun, aber ich habe vor kurzem war die Analyse der Gedächtnisleistung von großen Java-Anwendungen, und einige Erfahrung teilen kann.

Hier ist, wie ich gefunden, welche Objekte zu alt gen gefördert werden:

Zuerst müssen Sie erkennen, was Objekte sind in „alten / tenured“ Raum. Das ist man im Grunde Standard-Java-Heap-Analyse. Dazu empfehle ich jmap. Es ist Teil der Sonne Jvm. Lauf: jmap -dump:file=heap.hprof PID einen Heap Dump zu erhalten. Dies wird die Jvm während des Dump Pause (~ 30 Sekunden auf einem 2 GB Heap)

laden Sie nun die .prof Datei in Memory Analyzer (das beste Werkzeug für diese, die Hände nach unten) Ich würde einen Tag spielen mit Memory Analyzer ausgeben, um es zu verstehen, beobachten Sie die screencam (benötigt ein Login, aber es lohnt sich).

Jetzt werden Sie wissen, was Objekte in der Halde sind.

Hier ist der Trick: Im Übersichtsbild des Memory Analyzer gibt es einen Link zu: „Nicht erreichbar Objekte Histogramm“. Nun sind diese Objekte alle während der nächsten GC gesammelt werden. Aber einige sind wahrscheinlich in eden, einige in den Überlebenden und einige in alten.

Nun, einige Profiler erhalten mit Speicherfähigkeit Profilieren, ziehe ich YourKit. Führen Sie Ihre App mit YourKit und Plattenobjektzuordnung.

Ausführen es und Plattenobjekterstellung. Sobald Sie eine Liste von Objekten erstellt alle drei Listen verwenden, um ein Bild davon zu bekommen, was los ist. Tun Sie, was Menschen am besten kann, siehe Muster.

  • Welche Objekte erstellt werden und sind erreichbar. (Memory Analyzer)
  • Objekte unerreichbar im Heap (Memory Analyzer)
  • Objekte während eines Laufes erstellt (Profiler)

Eine weitere Möglichkeit zur Annäherung ist YourKit Generationen anzuzeigen. Sie können Schnappschüsse von Ihrem Heap nehmen und zu vergleichen, was Objekte zwischen Snapshots noch am Leben sind. Wenn Sie diese verwenden, um mit visualgc können Sie bestimmen, wie lange ein Objekt muss am leben zu alt gen gefördert zu werden, und in diesen Intervallen Schnappschüsse machen, um zu sehen, welche Objekte noch am leben sind.

Nun, viel Glück. / JT

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top