TPTP

1.3 "Thread Analysis"

Die "Thread Analysis" ermittelt statistische Informationen zu den im ausgeführten Programm verwendeten Threads.


Durchführung einer Thread-Analyse:

Als einfaches Beispielprogramm wird ein GUI-gesteuertes Tool zum Zeichnen von Polygonen auf einer 2D-Zeichenfläche verwendet. Die Verwendung einer GUI und die Verwendung von Buttons zur Steuerung generiert automatisch verschiedene Threads z.B. für die Klassen von Java2D und die Event-Handler der AWT-Bibliothek.

Das Polygon-Zeichen-Tool öffnet ein Fenster mit Buttons. Die Polygone werden in einem getrennten Fenster geöffnet.

Polygon_Tool Polygon_Haus

Während der Laufzeit des Programms werden Statusinformationen zu den am Programm beteiligten Threads mitgeschnitten und in folgenden Ansichten dargestellt:

In den "Thread-Statistics" bietet TPTP eine Übersicht aller laufenden Threads mit u.a. deren Status, Ausführungs- und Wartedauer. Bei einem Doppelklick auf ein Event wird der zugehörige "Call Stack" des Eintrags geöffnet.
Thread_Statistics

Hier kann man z.B. sehen, dass die zum Java AWT-Paket gehörende "AWT-EventQueue" insgesamt für eine Dauer von 1,384 Sekunden verschiedene Events von der Zeichenoberfläche gefangen hat, schon seit 16,287 Sekunden auf neue Benutzeraktionen wartet und sich genau einmal für 0,045 Sekunden im blockierten Zustand befunden hat (möglicherweise die Zeit, welche für das Zeichnen der grafischen Objekte benötigt worden ist).
Der "AWT-Shutdown"-Thread ist solange aktiv wie die grafische Oberfläche geöffnet ist und sorgt dafür, dass alle grafischen Komponenten ordnungsgemäß beendet werden.
Beim Thread "Finalizer" sieht man, dass dieser aktuell läuft, aber zuvor schon genau einmal 0,052 Sekunden gewartet hat. Der Java-Finalizer wird aufgerufen, bevor ein Objekt durch den Garbage Collector aus dem Speicher entfernt wird.

In den "Monitor-Statistics" lassen sich die "Threads Statistics" noch detaillierter in
-->"Monitor Classes Statistic",
-->"Blocks Statistics" und
-->"Waits Statistics"
aufschlüsseln, d.h. zusätzliche Informationen über das Blockier- und Warteverhalten aller Threads und deren aktiven Monitor-Klassen können hier ermittelt werden. Die Klasse "ReferenceQueue", in diesem Beispiel die Monitor-Klasse für den "Java2D Disposer", ist ein Datencontainer, welcher Referenzen auf Objekte beinhaltet, die vom Garbage-Collector regelmäßig auf ihren Abhängigkeitsstatus zum jeweiligen Objekt überprüft werden. (Der Wert "$Lock" hindert den Garbage-Collector sinnvollerweise daran die "ReferenceQueue" selbst zu löschen.)
Monitor_Statistics

Die "Thread Visualizer"-Ansicht dient der übersichtlichen Darstellung der Threads in einem Balkendiagramm.
Visualizer

Man erkennt hier anhand der dargestellten Balken die Zustände und Laufzeiten in welchen sich die am Programm beteiligten Threads während des Programmablaufs befinden (dargestellt durch die Zeitleiste oberhalb der Säulen und den Säulenfarben und -mustern).

Die Threads sind zudem in Gruppen unterteilt, hier relevant die Gruppen der "system"- und "main"-Threads.

Der Thread "main", welcher lediglich einmalig folgenden Code ausführt wird anschließend nicht mehr gebraucht und beendet:

public static void main(String[] args) {
	PolygonGUI pGui = new PolygonGUI();
	pGui.setVisible(true);
}

Beim "AWT-EventQueue"-Thread sieht man im obigen Säulendiagramm die zuvor im "Thread Statistics"-Fenster festgestellte Aktivzeit von 1,384 Sekunden in grüner Farbe bzw. die Wartezeit, wie auch bei allen anderen aufgeführten Threads orangefarben dargestellt.

Über den Knopf "Legend" kann die Bedeutung aller Säulenfarben ermittelt werden.
Visualizer_Legend

Bei einem Klick auf das Button Button lässt sich das Testergebnis auch einfach in ein Dokument des Formates ".csv", ".html" oder ".xml" exportieren und ist somit auch nachträglich für spätere Analysezwecke unabhängig von Eclipse verwendbar.

Zurück zur TPTP-Hauptseite
Zurück zur Werkzeugübersicht