Upload
strannik2013
View
328
Download
0
Embed Size (px)
Citation preview
Effectiveness and code optimization
in Java applications
Sergey MorenetsMay, 21 2016
SPEAKER
FOUNDER
DEVELOPER 12 YEARS
TRAINER 4 YEARS
WRITER 3 BOOKS
Spring Data Vs JDBC
Preface
JDBC
Agenda
AgendaWhat is effectiveness?Code optimizationJVM optimizationCode samplesMeasurements
Ideal code
Concise Readable Self-describing
Reusable Testable Modern
Flexible Scalable Effective
EffectivenessHard to determine on code/design review stages or in unit-testsCannot be defined in development environmentOptimization is interactivePremature optimization is evilHardware-specificThe only aspect of the ideal code that affects users
OptimizationDeveloper
Java compiler
JIT compiler
JVM
Premature optimization
Premature optimization
Premature optimization
Premature optimization
Premature optimization
Effectiveness
CPU usage
Memory footprint
Network I/O utilization
Disk I/O utilization
TuningJVM optionsMetaspace/heap/stack sizeGarbage collector optionshttp://blog.sokolenko.me/2014/11/javavm-options-production.htmlhttp://www.javaspecialists.eu/
Why is it important?
Time-consumin
g processes
Big data
Real-time systems
Code optimization
Code optimization public int execute(); Code: 0: iconst_2 1: istore_1 2: iinc 1, 1 5: iconst_1 6: ireturn
Code optimization
Code optimization public void execute(); Code: 0: return
Code optimization
Code optimization public static boolean get(); Code: 0: iconst_1 1: ireturn
Code optimization
Code optimization public void execute(); Code: 0: return
Code optimization
Code optimization public int execute(); Code: 0: iconst_2 1: istore_1 2: iconst_4 3: istore_2 4: iload_1 5: iload_2 6: iadd 7: ireturn
Code optimization
Code optimization public int execute(); Code: 0: bipush 6 2: ireturn
MeasurementsJMH is micro benchmarking frameworkDeveloped by Oracle engineersFirst release in 2013Requires build tool(Maven, Gradle)Can measure throughput or average timeIncludes warm-up periodPart of Java 9
Measurements
Warm-up
EnvironmentJMH 1.12Maven 3.3.9JDK 1.8.0.91Intel Core i7, 4 cores, 16 GB
Method vs Field
Method vs Field
1,95 ns1,93 ns
Strings
Strings
7,62 ns
13,4 ns
7,32 ns
7,24 ns
Conditions
Conditions
2,05 ns
2,03 ns
Strings
Strings
Measurements
Type(characters) Time(ns)Multiple(3) 627Single(3) 284Multiple(30) 773Single(30) 387
Strings
Strings
Measurements
Type(characters) Time(ns)Multiple(3) 634Single(3) 283Pattern(3) 151
Arrays
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
Arrays
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
Autoboxing
Measurements
Type Time(ns)Array(100 elements) 58List(100 elements) 390Array(10 000 elements) 4776List(10 000 elements) 48449
Collections
Collections
Type Time(ns)Fill HashMap(1000 elements) 16000Fill TreeMap(1000 elements) 40115Fill HashMap(100 000 elements)
2 027 116
Fill TreeMap(100 000 elements)
11 195 422
Iteration HashMap(1000 elements)
3086
Iteration TreeMap(1000 elements)
5038
Sample
Lists
Measurements
Type Time(ns)ArrayList (1000 elements) 4766ArrayList (100 000 elements)
381707
LinkedList (1000 elements) 5504LinkedList (100 000 elements)
504231
Lists
Measurements
Type Time(ns)ArrayList (1000 elements) 26767ArrayList (100 000 elements)
276(ms)
LinkedList (1000 elements) 300971LinkedList (100 000 elements)
3424(ms)
Lists
Measurements
Type Time(ns)ArrayList (1000 elements) 774ArrayList (100 000 elements)
144814
LinkedList (1000 elements) 2161LinkedList (100 000 elements)
292364
Comparison
Operations ArrayList LinkedList
AddDeleteGetIterate
Comparison
Comparison
Measurements
Type Time(ns)ArrayList (1000 elements) 49710ArrayList (100 000 elements)
632 754 873
LinkedList (1000 elements) 8507LinkedList (100 000 elements)
874 483
Speed Memory footprint
Big data structures
I/O support
Measurements
Type (elements) Time(ns)ArrayList (1000) 4732ArrayList (100 000) 387692LinkedList (1000) 5775LinkedList (100 000) 511646ObjectArrayList(1000) 3168ObjectArrayList(100 000) 322811
Lightweight
Hashing strategies
Primitive types
Hash table improvemen
ts
Measurements
Type (elements) Time(ns)ArrayList (1000) 4595ArrayList (100 000) 394645ObjectArrayList(1000) 328363ObjectArrayList(100 000) 3187TIntArrayList(1000) 189608TIntArrayList(100 000) 1925
LIFO
LIFO
LinkedList
Stack
ArrayDeque
Stack
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
Mapping
Mapping
Mapping
Measurements
Type Time(ns)HashMap 4,60EnumMap 3,40
Mapping
Measurements
Type Time(ns)HashMap 4,53EnumMap 3,40Direct usage 2,36
Loops vs Streams
Loops vs Streams
Measurements
Type 10 elements(ns)
1000 elements
100000 elements
For-each
85 8002 766765
Stream 147 11784 1103383
ConclusionCompiler and JIT optimizationSpeed and memory optimizationPrefer ArrayList/HashMapUse measurement tools
Theory
EnterpriseWeb server performanceDatabase programmingORM & DI frameworksREST servicesBuild management systems