Java Performance - Workshop
Java hat ein relativ komplexes Performance-Modell, insbesondere in
Anbetracht der Tatsache, dass Java an sich als einfache Programmiersprache
gilt. Compiler und Laufzeitsystem nehmen aufwändige und komplizierte
Optimierungen vor, um die Performanz von Java-Anwendungen zu verbessern.
Das hat zur Folge, dass man intuitiv kaum eine verlässliche Aussage
über die Performanz eines Java-Programms machen kann. Das wirkt
sich an verschiedenen Stellen ungünstig aus:
-
Bei Design und Implementierung. Es ist bisweilen alles andere als offensichtlich,
ob nun diese oder jene Implementierung schneller oder langsamer ist.
Ohne eine Messung, d.h. einen Benchmark, ist häufig keine Aussage
möglich. Das Implementieren eines sinnvollen Benchmarks ist
aber wiederum nicht ohne Tücken. Es ist nämlich gar nicht
so einfach, einen sinnvollen Micro-Benchmark zu schreiben, die die Performanz
zweier Algorithmen misst und vergleicht.
-
Beim Performance Tuning. Angenommen, ein (fast) fertiges Stück Software
ist zu langsam und soll einem Performance Tuning unterzogen werden.
In der Regel ist es unmöglich, auf Anhieb zu sagen, was die Software
so langsam macht. Ohne den Einsatz von Profiling-Tools – also mit
Intuition allein - lassen sich die Schwachstellen kaum identifizieren.
In diesem Workshop sehen wir uns beide Aspekte genauer an und probieren
sie in der Praxis am mitgebrachten Notebook aus.
-
Micro-Benchmarking. Wir sehen uns an, worauf bei einem Micro-Benchmark
in Java geachtet werden muss, damit er verlässliche Messwerte liefert.
Bei einer Virtuellen Maschine mit HotSpot-Technologie ist das eine nicht-triviale
Aufgabe und es gibt zahlreiche Gelegenheiten, typische Fehler zu machen.
Um nur ein Beispiel zu nennen: oft fällt genau der Source-Code, der
gemessen werden soll, der sogenannten Dead-Code-Elimination zum Opfer.
Dabei wird “toter Code”wegoptimiert, so dass zwar immer noch ein Messergebnis
produziert wird, dass aber keinerlei Aussagekraft mehr hat, da nichts Relevantes
gemessen wurde.
In dem Workshop erläutern wir diesen und diverse andere Fehler,
versuchen uns zur Illustration an einer Fallstudie und geben anschließend
Tipps für die Implementierung eines aussagekräftigen Micro-Benchmarks.
-
Performance Profiling. Wir sehen uns an, wie Profiling-Tools funktionieren
und wie man sie einsetzen kann, um sogenannte Performance-Bottlenecks zu
finden. Performance-Bottlenecks sind Stellen im Programm, an denen
Performance in nennenswertem Umfang verloren geht und an denen sich deshalb
ein Performance-Tuning lohnt. Dabei sind zwei Arten von Engpässen
relevant: Functional Hotspots, d.h. Algorithmen die häufig ausgeführt
werden und lange dauern, und Object Creation Hotspots, d.h. Stellen, an
denen massenhaft kurzlebige Objekte erzeugt werden. In beiden Fällen
lohnt sich dort ein Tuning.
In dem Workshop besprechen wir typische Strategien für das Profiling
und Tuning und probieren beides mithilfe verschiedener Tools an einem Fallbeispiel
aus. Wir erläutern u.a. die Arbeitsweise von Profiling-Tools,
weil der Einsatz des Tools zu irreführenden Verzerrungen der Messergebnisse
führen kann, die man kennen sollte, damit die Messergebnisse eines
Profilings korrekt interpretiert werden.
Für die Durchführung des Praxisteils werden die Teilnehmer gebeten,
ihre Notebooks mitzubringen. Die notwendige Software wird vorab
zur Vorbereitung des Workshops zum Download bereit gestellt, kann aber
auch später im Workshop noch ad hoc installiert werden. |
|
PREREQUISITES
|
|
Level:
|
intermediate / advanced |
Duration:
|
half day |
Prerequisites:
|
Attendants should be familiar with Java. |
Presented at:
|
W-JAX 2007
,
München, Germany, November 2007 |
If you are interested to hear more about this
and related topics you might want to check out the following seminar or
skim through some further reading:
|
Seminars
|
|