Netbeans Profiler
3. Memory Analysis
Der dritte Punkt in dem Profiling-Dialog ist "Memory".
In den Basic Settings existiert die folgende Auswahl:
- Record object creation only:
Nur die Objekt-Erstellung wird aufgezeichnet.
- Record both object creation and garbage collection:
Wenn ausgewählt, werden auch Informationen über die Lebensdauer der Objekte gesammelt
und wieviele Objekte noch aktiv sind. Dies erzeugt mehr Overhead.
- Record stack trace for allocations
Hier kann ein Intervall festgelegt werden, wie oft die Objekterstellung
abgetastet wird. Der Overhead wird weniger, die Performance steigt, je höher der Wert, auf Kosten der Genauigkeit.
- Record stack trace for allocations:
Wenn dies ausgewählt ist, wird der komplette Stack Trace aufgezeichnet.
Dies ermöglicht dann den Call Tree im Memory Snapshot zu sehen.
- Use defined Profiling Points
Wenn aktiviert, werden Profiling Points ausgeführt. Durch diese Points kann eine
höhere Genauigkeit der gesammelten Daten erzielt werden. Durch das Auslösen eines bestimmten Ereignisses, wie z.B.
der Ausführung einer Codezeile, wird der dazu gesetzte Profiling Point ähnlich wie ein "Breakpoint" beim Debuggen genutzt.
In den Advanced Settings können folgende Einstellungen gefunden werden:
- Record strack trace for allocations:
- Full stack depth: der komplette Stack wird aufgezeichnet.
- Limit stack to X frames: Die Tiefe des Stackrecording limitieren um profiling overhead zu reduzieren.
- Run garbage collection when getting memory results:
Wenn aktiviert, wird jedes mal eine komplette Garbage Collection ausgeführt, wenn im Menü Profile->Run GC
ausgewählt wird. Dies ermöglicht exaktere Angaben der Liveness von Objekten,
da tote Objekte gelöscht werden und nicht mehr als lebend angezeigt werden.
Vor allem in großen Applikatikonen kann eine komplette Garbage Collection einige Sekunden dauern.
- Enable threads monitoring: Wie auch in den anderen Modi kann hier das Thread monitoring aktiviert werden.
Und auch die globalen Einstellungen der JVM lässen sich hier überschreiben:
Wie auch schon im Perfomance Monitoring können auch beim Memory-Monitor Live Results angezeigt werden.
Auf dem folgenden Bild ist zu sehen, dass in der Beispielanwendung fast nur int[]-Typen verwendet wurden.
In den Spalten der Tabelle existieren folgende Werte:
- Klassenname
- Live Bytes: Größe des belegten Speicher in Bytes und Prozent
- Live Objects: Zur Zeit lebende Objekte
- Allocated Objects: Insgesamt allokierte Objekte
- Avg. Age: Das Alter des Objekts wird aus der Anzahl der garbage collections errechnet, die das Objekt überlebt hat.
Die Summe der Lebenszeit der Objekte geteilt durch die Anzahl der Live Objekte.
- Generations: Wird aus den verschiedenen Lebenszeiten der Live Objekte berechnet.
Mit einem Rechtsklick in die obige Tabelle kann im Kontextmenü "Show Allocations Stack Traces"
ausgewählt werden. Die im folgenden Bild dargestellte Ansicht erscheint.
Hier ist zu sehen, in welchen Methoden die Objekte erstellt wurden und mit einem Rechtsklick kann direkt
in die Codestelle gesprungen werden:
Zurück zu Netbeans Profiler