hands-on with jmh, become a benchmarking expert in 30 minutes!
TRANSCRIPT
![Page 1: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/1.jpg)
@tomvleminckx#Devoxx #Jmh
Hands-on with JMHBecome a benchmarking
expert in 30 minutes!Tom VleminckxFIS (Clear2Pay)
![Page 2: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/2.jpg)
@tomvleminckx#Devoxx #Jmh
Bio• @tomvleminckx & linkedin.com/in/tvleminckx
• Architect & Lead of Foundation/R&D team Clear2Pay (now part of FIS)
• Special interest in fintech, performance tuning, monitoring & operational intelligence
![Page 3: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/3.jpg)
@tomvleminckx#Devoxx #Jmh
Today• Benchmarking
• JMH
• Write – Run – Profile – Report
• Next/Pointers
![Page 4: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/4.jpg)
@tomvleminckx#Devoxx #Jmh
Benchmarking - Why• Baseline key algorithms/components• Fail early• Reproduce issues (> stress, > get (un)lucky)• Qualify• Complement Code Reviews• Educate
![Page 5: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/5.jpg)
@tomvleminckx#Devoxx #Jmh
Benchmarking is hard, really hard• Multi-threading
• Mistakes/limits/knowledge – JMM, measure time, stats
• JIT & CPU (inlining, constant folding, loop unrolling, false sharing, …)
• Should you write your own framework?
![Page 6: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/6.jpg)
@tomvleminckx#Devoxx #Jmh
Use JMH• Java Micro(*)benchmark Harness (JMH)
• Openjdk tool (JIT crowd)
• Write-Run-Profile-Report benchmarks
• Abstracts away the hard part, @-based
![Page 7: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/7.jpg)
@tomvleminckx#Devoxx #Jmh
Write• Maven archetype to setup project• But I’ll be using Gradle• Multiple JVM languages supported
• @-based• code generation• @Setup @Benchmark @TearDown
![Page 8: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/8.jpg)
@tomvleminckx#Devoxx #Jmh
Write• Some guidelines & Api’s to know about• Use BlackHole and/or return• Use State and Scope
=>> first example
![Page 9: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/9.jpg)
@tomvleminckx#Devoxx #Jmh
Run• Warmup needed• #threads, #iterations• Multiple modes• Throughput• Avg Time• Sample Time (percentiles)• Single Shot
![Page 10: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/10.jpg)
@tomvleminckx#Devoxx #Jmh
Profile• STACK – stack sampling
• COMP – JIT compiler stats
• CL – classloader stats• GC – garbage collection
info
![Page 11: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/11.jpg)
@tomvleminckx#Devoxx #Jmh
Report• Human readable
• CSV/JSON/… for CI
![Page 12: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/12.jpg)
@tomvleminckx#Devoxx #Jmh
Other• Producer/Consumer tests
supported• @Group to link @Benchmark instances
and balance/distribute with @GroupThreads
• Reuse benchmarks by using @Param
![Page 13: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/13.jpg)
@tomvleminckx#Devoxx #Jmh
Next/Pointers• Want to learn more?• http://openjdk.java.net/projects/code-tools/jmh/• http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-sa
mples/src/main/java/org/openjdk/jmh/samples
• Get the examples of this talk• https://github.com/tvleminckx/jmh-devoxx-tia
![Page 14: Hands-on with JMH, become a benchmarking expert in 30 minutes!](https://reader035.vdocuments.net/reader035/viewer/2022062306/58ed9abd1a28abb3388b459d/html5/thumbnails/14.jpg)
@tomvleminckx#Devoxx #Jmh
Q&A• Thanks for being my