© ESB Professional/Shutterstock.com
Java Magazin
Performanceoptimierung mit Microbenchmarks

Wer nicht weiß, was er misst, misst Mist!

Performanceoptimierung ist ein sehr spannendes Feld in der Softwareentwicklung. Es muss nicht immer gleich bis runter zu Assembler gehen, Java selbst bietet jede Menge Möglichkeiten, Code so zu schreiben, dass er sehr performant wird.

Björn Stahl


Erst einmal soll der Frage auf den Grund gegangen werden, was nun ein Microbenchmark ist und wann sein Einsatz sinnvoll ist.

Ein Microbenchmark ist ein kleiner künstlicher Benchmark, der dazu gedacht ist, eine Methode oder einen Algorithmus zu testen und verschiedene Szenarien und/oder Implementierungen miteinander zu vergleichen. Bei einem Microbenchmark geht es darum, die Performance eines kleinen, ganz bestimmten Codeteils zu messen, im Gegensatz zu ganzen Programmen oder Projekten. Das ist vor allem dann sinnvoll, wenn einzelne Methoden oder Codeabschnitte getestet werden sollen, die auf einem kritischen Pfad liegen. Beispiele sind die Verwendung von verschiedenen Datenstrukturen, der Vergleich von Sortiermethoden und Ähnliches. Für ein paar Fingerübungen sind Fragen à la Stack Overflow „Was ist schneller, X oder Y?“ ein guter Start.

Gerade in diesen Situationen ist es unerlässlich, bestimmte Implementierungen miteinander zu vergleichen. Wenn es dabei um kleine Codeabschnitte geht, die auch noch sehr schnell durchlaufen, wird es allerdings auch schnell kompliziert. Jede Messung beeinflusst das Ergebnis, und jeder kleine Fehler verfälscht das Ergebnis massiv.

Je kleiner die Zeiteinheiten werden, desto größer wird der störende Effekt von Umgebungsfaktoren, die sich nicht immer kontrollieren lassen. Es kann beispielsweise sein, dass die CPU gerade heruntergetaktet ist und erst auf volle Leistung umschalten muss. Im Hintergrund startet vielleicht gerade der Download eines Softwareupdates, oder der Virenscanner beginnt seine täglichen Aufgaben. Im Rahmen der Messungen sollten solche Faktoren so gut es geht ausgeschaltet werden. Sämtliche Programme und Services, die nicht absolut notwendig sind, sollten beendet werden.

Die Clubregeln des Microbenchmarks

Ein Problem mit Microbenchmarks ist die Tatsache, dass das Problem umso komplizierter wird, je mehr man sich damit auseinandersetzt und je geringer die Ausführungszeiten werden. Daher die folgenden Regeln:

Traue niemals den Ergebnissen Benchmarks lügen mehr als Statistiken Überprüfe immer deine Ergebnisse

Wenn die Ergebnisse eines Microbenchmarks nicht plausibel erscheinen, sind sie es meist auch nicht. In diesem Fall sollte man nach Fehlern im Benchmark Ausschau halten; dazu gleich mehr.

Regel 2 zielt darauf ab, dass man natürlich Benchmarks in jede Richtung beeinflussen kann, ob absichtlich oder unabsichtlich. Gerade wenn jemand einfach behauptet, dass X schneller ist als Y, schaut euch den dazugehörigen Bench...

Java Magazin
Performanceoptimierung mit Microbenchmarks

Wer nicht weiß, was er misst, misst Mist!

Performanceoptimierung ist ein sehr spannendes Feld in der Softwareentwicklung. Es muss nicht immer gleich bis runter zu Assembler gehen, Java selbst bietet jede Menge Möglichkeiten, Code so zu schreiben, dass er sehr performant wird.

Björn Stahl


Erst einmal soll der Frage auf den Grund gegangen werden, was nun ein Microbenchmark ist und wann sein Einsatz sinnvoll ist.

Ein Microbenchmark ist ein kleiner künstlicher Benchmark, der dazu gedacht ist, eine Methode oder einen Algorithmus zu testen und verschiedene Szenarien und/oder Implementierungen miteinander zu vergleichen. Bei einem Microbenchmark geht es darum, die Performance eines kleinen, ganz bestimmten Codeteils zu messen, im Gegensatz zu ganzen Programmen oder Projekten. Das ist vor allem dann sinnvoll, wenn einzelne Methoden oder Codeabschnitte getestet werden sollen, die auf einem kritischen Pfad liegen. Beispiele sind die Verwendung von verschiedenen Datenstrukturen, der Vergleich von Sortiermethoden und Ähnliches. Für ein paar Fingerübungen sind Fragen à la Stack Overflow „Was ist schneller, X oder Y?“ ein guter Start.

Gerade in diesen Situationen ist es unerlässlich, bestimmte Implementierungen miteinander zu vergleichen. Wenn es dabei um kleine Codeabschnitte geht, die auch noch sehr schnell durchlaufen, wird es allerdings auch schnell kompliziert. Jede Messung beeinflusst das Ergebnis, und jeder kleine Fehler verfälscht das Ergebnis massiv.

Je kleiner die Zeiteinheiten werden, desto größer wird der störende Effekt von Umgebungsfaktoren, die sich nicht immer kontrollieren lassen. Es kann beispielsweise sein, dass die CPU gerade heruntergetaktet ist und erst auf volle Leistung umschalten muss. Im Hintergrund startet vielleicht gerade der Download eines Softwareupdates, oder der Virenscanner beginnt seine täglichen Aufgaben. Im Rahmen der Messungen sollten solche Faktoren so gut es geht ausgeschaltet werden. Sämtliche Programme und Services, die nicht absolut notwendig sind, sollten beendet werden.

Die Clubregeln des Microbenchmarks

Ein Problem mit Microbenchmarks ist die Tatsache, dass das Problem umso komplizierter wird, je mehr man sich damit auseinandersetzt und je geringer die Ausführungszeiten werden. Daher die folgenden Regeln:

Traue niemals den Ergebnissen Benchmarks lügen mehr als Statistiken Überprüfe immer deine Ergebnisse

Wenn die Ergebnisse eines Microbenchmarks nicht plausibel erscheinen, sind sie es meist auch nicht. In diesem Fall sollte man nach Fehlern im Benchmark Ausschau halten; dazu gleich mehr.

Regel 2 zielt darauf ab, dass man natürlich Benchmarks in jede Richtung beeinflussen kann, ob absichtlich oder unabsichtlich. Gerade wenn jemand einfach behauptet, dass X schneller ist als Y, schaut euch den dazugehörigen Bench...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang