© Excellent backgrounds/Shutterstock.com
Java Magazin
Java Microbenchmark Harness

Performance analysieren


Wir haben uns im letzten Beitrag unserer Serie [1] mit so genannten Microbenchmarks beschäftigt. Sie dienen dem Performancevergleich verschiedener Implementierungsalternativen. Dabei haben wir darauf hingewiesen, wie fehleranfällig Microbenchmarks sind. In diesem Beitrag wollen wir uns das Werkzeug Java Microbenchmark Harness ansehen, kurz JMH. JMH ist ein Benchmarkrahmen, den man für eigene Microbenchmarks verwenden kann. Wobei hilft JMH? Welches Problem löst es?

Wer schon mal einen Microbenchmark selbst gemacht hat, weiß aus Erfahrung, dass es ziemlich viel Arbeit ist, mit einem Benchmark halbwegs verlässliche Performancekennzahlen zu beschaffen. Den größten Teil der Arbeit steckt man in den Benchmarkrahmen, den man sich baut, um darin die auszumessenden Algorithmen ablaufen zu lassen. Wir haben im letzten Beitrag einige der Probleme geschildert, die sich daraus ergeben, dass die Messergebnisse eines Benchmarks u. a. durch die JVM beeinflusst werden. Exemplarisch haben wir einige dieser Einflussfaktoren angeschaut, wie den Garbage Collector oder JIT-Compiler [1]. Weil sie zu irreführenden Messwerten führen können, versucht man, in seinen Benchmarkrahmen verschiedene Maßnahmen einzubauen, mit denen die verzerrenden Effekte der JVM-Aktivitäten vermieden werden, z. B. Aufwärmphasen, explizite Garbage Collection oder wiederholte Messungen in Schleifen.

Weil Maßnahmen zur Vermeidung von JVM-bedingten Messwertverfälschungen in jedem Microbenchmark gebraucht werden, sind mit der Zeit wiederverwendbare Benchmarkgerüste entstanden, so genannte Benchmark Harnesses. Eines der ersten Werkzeuge dieser Art war Caliper von Google [2]. Der zurzeit populärste Benchmark Harness ist JMH, der Java Microbenchmark Harness [3]. Er ist bei Oracle entstanden und wird dort im Rahmen der Weiterentwicklung von Sprache und JDK verwendet. Als Urheber des JMH gilt Aleksey Shipilëv. Er arbeitet als Performanceexperte bei Oracle. JMH stammt ursprünglich aus der Entwicklung der JRockit-JVM, und die Performanceteams sowohl der JRockit-JVM als auch der HotSpot-JVM haben zur Entwicklung des JMH beigetragen. Vor einigen Jahren, etwa 2013, wurde JMH der Java-Community zur Verfügung gestellt, und seitdem kann ihn jeder für seine eigenen Benchmarks verwenden. Mittlerweile ist JMH der De-facto-Standard und genießt den Ruf, sämtliche Benchmarkprobleme verlässlich zu lösen. Ob das stimmt, wollen wir uns in diesem Beitrag anschauen.

JMH ist umfangreich und komplex. Es bietet Lösungen für viele P...

Java Magazin
Java Microbenchmark Harness

Performance analysieren

Wir haben uns im letzten Beitrag unserer Serie [1] mit so genannten Microbenchmarks beschäftigt. Sie dienen dem Performancevergleich verschiedener Implementierungsalternativen. Dabei haben wir darauf hingewiesen, wie fehleranfällig Microbenchmarks sind. In diesem Beitrag wollen wir uns das Werkzeug Java Microbenchmark Harness ansehen, kurz JMH. JMH ist ein Benchmarkrahmen, den man für eigene Microbenchmarks verwenden kann. Wobei hilft JMH? Welches Problem löst es?

Angelika Langer, Klaus Kreft


Wir haben uns im letzten Beitrag unserer Serie [1] mit so genannten Microbenchmarks beschäftigt. Sie dienen dem Performancevergleich verschiedener Implementierungsalternativen. Dabei haben wir darauf hingewiesen, wie fehleranfällig Microbenchmarks sind. In diesem Beitrag wollen wir uns das Werkzeug Java Microbenchmark Harness ansehen, kurz JMH. JMH ist ein Benchmarkrahmen, den man für eigene Microbenchmarks verwenden kann. Wobei hilft JMH? Welches Problem löst es?

Wer schon mal einen Microbenchmark selbst gemacht hat, weiß aus Erfahrung, dass es ziemlich viel Arbeit ist, mit einem Benchmark halbwegs verlässliche Performancekennzahlen zu beschaffen. Den größten Teil der Arbeit steckt man in den Benchmarkrahmen, den man sich baut, um darin die auszumessenden Algorithmen ablaufen zu lassen. Wir haben im letzten Beitrag einige der Probleme geschildert, die sich daraus ergeben, dass die Messergebnisse eines Benchmarks u. a. durch die JVM beeinflusst werden. Exemplarisch haben wir einige dieser Einflussfaktoren angeschaut, wie den Garbage Collector oder JIT-Compiler [1]. Weil sie zu irreführenden Messwerten führen können, versucht man, in seinen Benchmarkrahmen verschiedene Maßnahmen einzubauen, mit denen die verzerrenden Effekte der JVM-Aktivitäten vermieden werden, z. B. Aufwärmphasen, explizite Garbage Collection oder wiederholte Messungen in Schleifen.

Weil Maßnahmen zur Vermeidung von JVM-bedingten Messwertverfälschungen in jedem Microbenchmark gebraucht werden, sind mit der Zeit wiederverwendbare Benchmarkgerüste entstanden, so genannte Benchmark Harnesses. Eines der ersten Werkzeuge dieser Art war Caliper von Google [2]. Der zurzeit populärste Benchmark Harness ist JMH, der Java Microbenchmark Harness [3]. Er ist bei Oracle entstanden und wird dort im Rahmen der Weiterentwicklung von Sprache und JDK verwendet. Als Urheber des JMH gilt Aleksey Shipilëv. Er arbeitet als Performanceexperte bei Oracle. JMH stammt ursprünglich aus der Entwicklung der JRockit-JVM, und die Performanceteams sowohl der JRockit-JVM als auch der HotSpot-JVM haben zur Entwicklung des JMH beigetragen. Vor einigen Jahren, etwa 2013, wurde JMH der Java-Community zur Verfügung gestellt, und seitdem kann ihn jeder für seine eigenen Benchmarks verwenden. Mittlerweile ist JMH der De-facto-Standard und genießt den Ruf, sämtliche Benchmarkprobleme verlässlich zu lösen. Ob das stimmt, wollen wir uns in diesem Beitrag anschauen.

JMH ist umfangreich und komplex. Es bietet Lösungen für viele P...

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