Netbeans Profiler

1. Monitor Application

Als erste Option im Profiler-Dialog ist auf der linken Seite der "Monitor" zu finden. Hier können eigene Voreinstellungen als Profile abgespeichert werden.
In den "Basic Settings" gibt es hier nur die Möglichkeit "Thread Monitoring" zu aktivieren.
Um den Performance-Einbruch durch das Profilen zu sehen, ist am unteren Ende des Dialogs ein Balken dargestellt,
welcher ein ungefähres Bild des Overheads abgibt.
Da die "Monitor Application" jedoch sehr schnell abläuft, ist praktisch kein Performance-Verlust festzustellen.
Deswegen bleibt der Balken bei "Monitor Application" auch immer leer.

nbp02

In den "Advanced Settings" können zusätzlich globale Einstellungen überschrieben werden.

nbp03
Nach dem Klicken auf "Run", startet das Programm und die Profiling-Ansicht öffnet sich.

In der Profiling-Ansicht lassen sich jetzt verschiedene weitere Ansichten öffnen.
Hier kann die Heap-Größe live angeschaut werden.
Und wie bei allen Diagrammen im netbeans profiler lassen sich mit der Maus
die Werte zu dem gewünschten Zeitpunkt anzeigen.

nbp12

In dem Tab "Memory (GC)" können Details zum Garbage Collector betrachtet werden.
Eine "Surviving Generation" ist eine Generation die zumindest eine garbage collection überlebt hat.
Eine Generation ist ein Set von Exemplaren.
Bei einem normalen Programmverlauf steigt die Anzahl der "Surviving Generations" nach Programmstart,
sollte aber nach einiger Zeit ein stabiles Limit haben.
Wenn sie dennoch kontinuierlich über einen längern Zeitraum steigt, egal wie schnell, befindet sich wahrscheinlich ein Memory Leak in der Applikation.

nbp13

In dem Tab "Threads/Loaded Classes" ist die Anzahl der Threads und die Anzahl der geladenen Klassen als Zeitlinie zu sehen.

nbp14

Da anfangs "Enable threads monitoring" aktiviert wurde, ist es nun möglich
live die Threads zu sehen. Wie zum Beispiel in der Timeline:

nbp09

Hier sieht man die an der Programmausführung beteiligten Threads in Form von Säulen innerhalb einer Zeitskala. Z.B. erkennt man dass der Thread "main", nachdem er weitere Methoden aufgerufen hat, nicht mehr benötigt und beendet wird. Mit dem Start der "AWT"-Funktionen ist z.B. der "AWT-Windows"-Thread durchgehend aktiv. Mit ihm wird auch die "AWT-Event-Queue" gestartet, die, wie man in der Abbildung gut erkennen kann, sich die meiste Zeit im Zustand "Wait" befindet und bei Eintreten eines Events kurzzeitig in den Zustand "Running" übergeht.

Oder auch hier in der tabellarischen Ansicht in der die Zeiten der Threads in Sekunden und auch prozentual zu sehen sind:

nbp10

Ebenfalls besteht die Möglichkeit eine Detail-Ansicht für jeden Thread zu öffnen, in welcher Thread-Zustände in einem Kreisdiagramm zu sehen sind. Neben einer Timeline und einem hilfreichen Info-Text (zumindest bei den Java-Threads) werden auch die absoluten Laufzeiten und relativen Anteile der Threadzustände an der Gesamtlaufzeit ausgegeben.
In dem Tab "Details" gibt es ein Log-Window in der sich für jede Status-Änderung des Threads einen Eintrag befindet:

nbp11

Der in der Abbildung dargestellte "main"-Thread war also laut Abbildung 800 Millisekunden aktiv und 500 Millisekunden, also 62,5% der Gesamtlaufzeit, im Zustand "Sleeping". Nur 25% der Zeit war dieser im Zustand "Running", also beschäftigt.

Zurück zu Netbeans Profiler