Effective Java applications
-
Upload
strannik2013 -
Category
Software
-
view
481 -
download
0
Transcript of Effective Java applications
About author• Works in IT since 2000• 12 year of Java SE/EE experience• Regular speaker at Java conferences• Author of “Development of Java applications” and
“Main errors in Java programming ”books• Founder of http://it-simulator.com
Effectiveness• Hard to determine on code/design review stages
or in unit-tests• Is relevant for the specific project configuration• Cannot be defined in development environment• Depends on the application environment• Premature optimization is evil• Hardware-specific
Tuning• JVM options• Metaspace/heap/stack size• Garbage collector options• http://
blog.sokolenko.me/2014/11/javavm-options-production.html
Measurements• JMH is micro benchmarking framework• Developed by Oracle engineers• First release in 2013• Requires build tool(Maven, Gradle)• Can measure throughput or average time• Includes warm-up period
Measurements
Type Time(ns)Long usage(small numbers) 3Long usage(average numbers)
19
Long usage(big numbers) 33Long usage (not a number) 849Regexp (small numbers) 58Regexp (average numbers) 75Regexp (big numbers) 82Regexp (not a number) 47
Measurements
Type Time(ns)Entries (10 pairs) 30Keys/Values(10 pairs) 70Entries (1000 pairs) 2793Keys/Values(1000 pairs) 8798Entries (200 000 pairs) 237652Keys/Values(200 000 pairs) 350821
Measurements
Type Time(ns)For (10 elements) 4,9For-each (10 elements) 5,1For (1000 elements) 260For-each (1000 elements) 259,9For (50000 elements) 12957For-each (50000 elements) 12958
Measurements
Type Time(ns)For (10 elements) 5,04For optimized(10 elements)
5,07
For (1000 elements) 258,9For-each (1000 elements) 258,7
Measurements
Type Time(ns)Sequential (10 elements) 5Parallel (10 elements) 6230Sequential (1000 elements) 263Parallel (1000 elements) 8688Sequential (50000 elements)
13115
Parallel (50000 elements) 34695
MeasurementsType Time(ns)Sequential (10 elements) 5Parallel (10 elements) 6230Sequential (1000 elements) 263Parallel (1000 elements) 8688Sequential (50000 elements)
13115
Parallel (50000 elements) 34695Sequential (5 000 000 elements)
1 765 206
Parallel (5 000 000 elements)
2 668 564
Sequential (500 000 000) 183 msParallel (500 000 000) 174 ms
Measurements
Type Time(ns)Fill array (1000 elements) 148Fill bit set(1000 elements) 1520Fill array (50 000 elements) 4669Fill bit set(50 000 elements)
71395
Measurements
Type Time(ns)Fill array (1000 elements) 148Fill bit set(1000 elements) 261Fill array (50 000 elements) 4669Fill bit set(50 000 elements)
12758
Measurements
Type Time(ns)Stack(1000 elements) 5729LinkedList(1000 elements) 7928ArrayDeque(1000 elements)
4366
Stack(100 000 elements) 588770LinkedList(100 000 elements)
773684
ArrayDeque(100 000 elements)
484280
Measurements
Type Time(ns)ArrayList (1000 elements) 4766ArrayList (100 000 elements)
381707
LinkedList (1000 elements) 5504LinkedList (100 000 elements)
504231