Hands-on with JMH, become a benchmarking expert in 30 minutes!

14
@tomvleminckx #Devoxx #Jmh Hands-on with JMH Become a benchmarking expert in 30 minutes! Tom Vleminckx FIS (Clear2Pay)

Transcript of Hands-on with JMH, become a benchmarking expert in 30 minutes!

Page 1: Hands-on with JMH, become a benchmarking expert in 30 minutes!

@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!

@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!

@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!

@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!

@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!

@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!

@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!

@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!

@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!

@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!

@tomvleminckx#Devoxx #Jmh

Report• Human readable

• CSV/JSON/… for CI

Page 12: Hands-on with JMH, become a benchmarking expert in 30 minutes!

@tomvleminckx#Devoxx #Jmh

Other• Producer/Consumer tests

supported• @Group to link @Benchmark instances

and balance/distribute with @GroupThreads

• Reuse benchmarks by using @Param

Page 14: Hands-on with JMH, become a benchmarking expert in 30 minutes!

@tomvleminckx#Devoxx #Jmh

Q&A• Thanks for being my