Java Performance
Performance und Stabilität gehören zu den wichtigsten nichtfunktionalen Anforderungen von Softwaresystemen. Sie sind wichtige Faktoren für die Akzeptanz und Effizenz von Anwendungen und damit auch Treiber für ihren Erfolg. Übertrifft der Erfolg die Erwartungen tritt die Skalierbarkeit und die damit verbundenen Herausforderungen an das Tageslicht.
Die Java Plattform bietet viele Werkzeugen, zur Analyse und Diagnose von Performanceproblemen und zur Durchführung von Performance Tuning.
In diesem Kompetenzbereich präsentieren wir Ihnen die wichtigsten Fakten und Informationen zum Thema Java Performance und Java Tuning.
Java Profiler
Performanceprobleme sind oft sehr mysteriös, so dass ein detektivisches Vorgehen zur Performance Optimierung gefragt ist. Die Ursache für ein langsames Verhalten der Anwendung muss Schritt für Schritt eingegrenzt werden. Obwohl jeder “Fall” anders ist, bleibt das Vorgehen dabei gleich: Verhalten verstehen, Messungen durchführen, Ergebnisse erklären und Veränderung durchführen. Anschließend verifizieren.
Während der Entwicklung unterstützen Java Profiler die Analyse des Laufzeitverhaltens und erlauben schnell besonders langsame Codestellen zu identifizieren.
Java Memory Leak
Ein wichtiger Bestandteil von Java Tuning ist die Analyse von Speicherverwaltungsproblemen, Garbage Collection und Memory Leaks. Neben Java Profilern kommen Produktionsmonitore wie AppDynamics und Garbage Collection Analyse Werkzeuge zum Einsatz. Häufig lässt sich der, durch die sogenannte “Stop-The-World” Garbage Collection verursachte, komplette Stillstand von einigen Sekunden auf wenige Millisekunden reduzieren, falls er nicht sogar komplett vermeidbar ist.
Java Virtual Machine
Es gibt eine Reihe von Java Virtual Machines, die ihre jeweiligen Stärken und Schwächen haben. Sie unterschieden sich teilweise stark in ihrer Speicherverwaltung, Nebenläufigkeit oder Konfiguration. Des Weiteren liefern die verschiedenen Hersteller unterschiedliche Werkzeuge mit aus.
Neben der HotSpot JVM von Sun/Oracle sind JRockit oder IBM J9 am häufigsten im Einsatz.
Application Performance Management
Da Java Performance schlecht planbar ist, bieten sich gerade agile Entwicklungsverfahren und Testautomatisierungen an. Zum Testen verwendet man Lasttreiber, die definierte Testpläne beliebig oft gegen eine Testumgebung ausführen. Gemessen wird mit Diagnosewerkzeugen, welche sich möglichst selbstätig an die zu messende Umgebung anpassen und so schnell Bereiche identifizieren, die entweder generell oder erst unter Last (durch Nebenläufigkeitseffekte) langsam sind.
Während Java Troubleshooting und Tuning einmalige Aktivitäten sind, sind Performancetests bereits der erste Schritt in einer umfassenden Adressierung des Themas Application Performance Management, welches sich auch mit dem Betrieb und der Überwachung von Anwendungsperformance beschäftigt. Idealerweise wird ein kontinuierlicher Verbesserungsprozess eingeführt, der mit Produktionsüberwachungswerkzeugen kritische Stellen identifiziert und adressiert.
Web Performance Optimization
Da viele Java Anwendungen eine wichtige Weboberfläche haben wird neben der Java Performance auch die sogenannte Web Performance Optimierung wichtig. Insbesondere bei Anwendungen die von einem großen Benutzerkreis genutzt werden macht es Sinn diesen Bereich zu optimieren um den Benutzern eine schnelle Oberfläche im Browser zu bieten und Netzwerkkommunikation zu reduzieren.