how fast is your java code
TRANSCRIPT
![Page 1: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/1.jpg)
How Fast is Your Java Code?
Performance micro-benchmarking
Dmitry Buzdin
![Page 2: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/2.jpg)
About Speaker
Dmitry Buzdin
@buzdin
![Page 3: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/3.jpg)
Motivation
![Page 4: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/4.jpg)
Programming for Performance
![Page 5: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/5.jpg)
SituationSome developers optimize code a lot
Good habits like:* Putting final keyword* Optimizing assignments* Creating less objects* Avoiding reflection
![Page 6: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/6.jpg)
Situation
Arguing who’s code is faster
![Page 7: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/7.jpg)
So how do you measure that?
![Page 8: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/8.jpg)
Macro-benchmarking
vs Micro-
benchmarking
![Page 9: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/9.jpg)
Challenge
![Page 10: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/10.jpg)
Challenge: How Fast is That?
System.out.println("Hello, World!");
![Page 11: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/11.jpg)
DEMO
![Page 12: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/12.jpg)
1 millisecond = 1 000 microseconds =
1 000 000 nanoseconds
![Page 13: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/13.jpg)
Test Noise
Classloader activitiesReflection inflationGarbage collectionJIT compilation
![Page 14: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/14.jpg)
JIT Compiler
Behavior-drivenCan compile and “de-compile”Client and Server JITs are different
![Page 15: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/15.jpg)
ManagementFactory.getXYZBean()
Getting JVM Stats
![Page 16: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/16.jpg)
ClassLoadingMXBean
GarbageCollectorMXBean
RuntimeMXBean
MemoryMXBean
ThreadMXBean
...
![Page 17: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/17.jpg)
Measurement Pitfalls
Measuring in millisecondsNot doing warm-upsNot doing enough warm-upsWrong JVM settingsToo few iterations
![Page 18: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/18.jpg)
Conclusions
![Page 19: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/19.jpg)
Conclusions
Do not do micro optimizationsWrite first - then measure critical placesProgram readability is more importantDo perform macro optimizations instead
![Page 20: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/20.jpg)
“We should forget about small efficiencies, say about 97% of the
time: premature optimization is the root of all evil”
Donald Knuth
![Page 21: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/21.jpg)
Some Resourceshttp://www.ibm.com/developerworks/java/library/j-benchmark2/
index.html
http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java
http://docs.oracle.com/javase/specs/jvms/se7/html/index.html
![Page 22: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/22.jpg)
Code is on GitHub
https://github.com/buzdin/java-microbenchmarking/
![Page 23: How Fast is Your Java Code](https://reader033.vdocuments.net/reader033/viewer/2022052822/554f3a0bb4c90572088b4e9a/html5/thumbnails/23.jpg)
The End