Please enable JavaScript.
Coggle requires JavaScript to display documents.
Java Performance Micro benchmarking (Tipps (Startup Effekte (vllt.…
Java Performance Micro benchmarking
fehleranfällig
vllt. schlechtere Wartbarkeit
fehlerhafte Inputdaten
Caches missed
concurrencies
oft wird was falsches gemessen
auch timer haben kosten
auch timer haben granularität
latenzzeit
bei mehr threads wird auch der timer teurer
Garbage Collection wird gerne bei großen Datenmengen mitgemessen
microbenchmark
goal
vergleich von verschiedenen Implementierungen
wirken sich JVm flags auf performance aus
man sieht nicht ob eine zeile teuer ist
nicht verallgemeinern
Zwei verschieden Compiler (Server und Local) C1 und C2, Dead Code elimination
Tipps
Startup Effekte
vllt. Benchmark umkehren
konzeptonelle Fehler (clean up etc)
wird JIT Compiler mitgemessen
hat JIT Compiler optimiert
Jit Compiler verwirft berechnungen nicht benutzt werden
verschiedene JVMs
Was soll verglichen werden: Best case / worst case
DeadCode elimination kann benchmark zu gut machen... benchmark wird nicht gemessen
JIT
Just In Time Compiler
wird u.U. mitgemessen
verzerrt Messwerte
Jit Compiler needs warm up
Jit Compilation log -XX:+PrintCompilation (Optionen in Java9 hat sich geändert)
Inlining
Metodenaufruf kostet Geld
Methodenaufruf wird durch body ersetzt
ermöglicht weiterer Optimierung
Größe der methode in ByteCodeGröße
Problem: virtuelle Methode
früher non-final methoden wurden nicht optimiert
u.U. Deoptimierung
heute non final methoden werden geinlined
Vorsicht bei Constant folding
Tool: JitWatch
JMH "black holes"
Benchmark Harness (JMH)
Benchmark Framework
nicht unbedingt richtig ...
mit annotations
großes Framework
verschiedene benchmark modes
Mode.AverageTime
Mode.SampleTime
SingleShotTime
verschieden warm-up modes
Black Holes
Garbage Collection
Java9 Ahead of Time Compilation