94
Effectiveness and code optimization in Java applications Sergey Morenets May, 21 2016

JEEConf 2016. Effectiveness and code optimization in Java applications

Embed Size (px)

Citation preview

Page 1: JEEConf 2016. Effectiveness and code optimization in  Java applications

Effectiveness and code optimization

in Java applications

Sergey MorenetsMay, 21 2016

Page 2: JEEConf 2016. Effectiveness and code optimization in  Java applications

SPEAKER

FOUNDER

DEVELOPER 12 YEARS

TRAINER 4 YEARS

WRITER 3 BOOKS

Page 3: JEEConf 2016. Effectiveness and code optimization in  Java applications
Page 4: JEEConf 2016. Effectiveness and code optimization in  Java applications

Spring Data Vs JDBC

Page 5: JEEConf 2016. Effectiveness and code optimization in  Java applications

Preface

Page 6: JEEConf 2016. Effectiveness and code optimization in  Java applications

JDBC

Page 7: JEEConf 2016. Effectiveness and code optimization in  Java applications
Page 8: JEEConf 2016. Effectiveness and code optimization in  Java applications
Page 9: JEEConf 2016. Effectiveness and code optimization in  Java applications

Agenda

Page 10: JEEConf 2016. Effectiveness and code optimization in  Java applications

AgendaWhat is effectiveness?Code optimizationJVM optimizationCode samplesMeasurements

Page 11: JEEConf 2016. Effectiveness and code optimization in  Java applications

Ideal code

Concise Readable Self-describing

Reusable Testable Modern

Flexible Scalable Effective

Page 12: JEEConf 2016. Effectiveness and code optimization in  Java applications

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

Page 13: JEEConf 2016. Effectiveness and code optimization in  Java applications

OptimizationDeveloper

Java compiler

JIT compiler

JVM

Page 14: JEEConf 2016. Effectiveness and code optimization in  Java applications

Premature optimization

Page 15: JEEConf 2016. Effectiveness and code optimization in  Java applications

Premature optimization

Page 16: JEEConf 2016. Effectiveness and code optimization in  Java applications

Premature optimization

Page 17: JEEConf 2016. Effectiveness and code optimization in  Java applications

Premature optimization

Page 18: JEEConf 2016. Effectiveness and code optimization in  Java applications

Premature optimization

Page 19: JEEConf 2016. Effectiveness and code optimization in  Java applications

Effectiveness

CPU usage

Memory footprint

Network I/O utilization

Disk I/O utilization

Page 20: JEEConf 2016. Effectiveness and code optimization in  Java applications

TuningJVM optionsMetaspace/heap/stack sizeGarbage collector optionshttp://blog.sokolenko.me/2014/11/javavm-options-production.htmlhttp://www.javaspecialists.eu/

Page 21: JEEConf 2016. Effectiveness and code optimization in  Java applications

Why is it important?

Time-consumin

g processes

Big data

Real-time systems

Page 22: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization

Page 23: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization public int execute(); Code: 0: iconst_2 1: istore_1 2: iinc 1, 1 5: iconst_1 6: ireturn

Page 24: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization

Page 25: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization public void execute(); Code: 0: return

Page 26: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization

Page 27: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization public static boolean get(); Code: 0: iconst_1 1: ireturn

Page 28: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization

Page 29: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization public void execute(); Code: 0: return

Page 30: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization

Page 31: JEEConf 2016. Effectiveness and code optimization in  Java applications

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

Page 32: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization

Page 33: JEEConf 2016. Effectiveness and code optimization in  Java applications

Code optimization public int execute(); Code: 0: bipush 6 2: ireturn

Page 34: JEEConf 2016. Effectiveness and code optimization in  Java applications

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

Page 35: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Page 36: JEEConf 2016. Effectiveness and code optimization in  Java applications

Warm-up

Page 37: JEEConf 2016. Effectiveness and code optimization in  Java applications

EnvironmentJMH 1.12Maven 3.3.9JDK 1.8.0.91Intel Core i7, 4 cores, 16 GB

Page 38: JEEConf 2016. Effectiveness and code optimization in  Java applications

Method vs Field

Page 39: JEEConf 2016. Effectiveness and code optimization in  Java applications

Method vs Field

1,95 ns1,93 ns

Page 40: JEEConf 2016. Effectiveness and code optimization in  Java applications

Strings

Page 41: JEEConf 2016. Effectiveness and code optimization in  Java applications

Strings

7,62 ns

13,4 ns

7,32 ns

7,24 ns

Page 42: JEEConf 2016. Effectiveness and code optimization in  Java applications

Conditions

Page 43: JEEConf 2016. Effectiveness and code optimization in  Java applications

Conditions

2,05 ns

2,03 ns

Page 44: JEEConf 2016. Effectiveness and code optimization in  Java applications

Strings

Page 45: JEEConf 2016. Effectiveness and code optimization in  Java applications

Strings

Page 46: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type(characters) Time(ns)Multiple(3) 627Single(3) 284Multiple(30) 773Single(30) 387

Page 47: JEEConf 2016. Effectiveness and code optimization in  Java applications

Strings

Page 48: JEEConf 2016. Effectiveness and code optimization in  Java applications

Strings

Page 49: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type(characters) Time(ns)Multiple(3) 634Single(3) 283Pattern(3) 151

Page 50: JEEConf 2016. Effectiveness and code optimization in  Java applications

Arrays

Page 51: JEEConf 2016. Effectiveness and code optimization in  Java applications

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

Page 52: JEEConf 2016. Effectiveness and code optimization in  Java applications

Arrays

Page 53: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type Time(ns)Sequential (10 elements) 5Parallel (10 elements) 6230Sequential (1000 elements) 263Parallel (1000 elements) 8688Sequential (50000 elements)

13115

Parallel (50000 elements) 34695

Page 54: JEEConf 2016. Effectiveness and code optimization in  Java applications

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

Page 55: JEEConf 2016. Effectiveness and code optimization in  Java applications

Autoboxing

Page 56: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type Time(ns)Array(100 elements) 58List(100 elements) 390Array(10 000 elements) 4776List(10 000 elements) 48449

Page 57: JEEConf 2016. Effectiveness and code optimization in  Java applications

Collections

Page 58: JEEConf 2016. Effectiveness and code optimization in  Java applications

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

Page 59: JEEConf 2016. Effectiveness and code optimization in  Java applications

Sample

Page 60: JEEConf 2016. Effectiveness and code optimization in  Java applications
Page 61: JEEConf 2016. Effectiveness and code optimization in  Java applications

Lists

Page 62: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type Time(ns)ArrayList (1000 elements) 4766ArrayList (100 000 elements)

381707

LinkedList (1000 elements) 5504LinkedList (100 000 elements)

504231

Page 63: JEEConf 2016. Effectiveness and code optimization in  Java applications

Lists

Page 64: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type Time(ns)ArrayList (1000 elements) 26767ArrayList (100 000 elements)

276(ms)

LinkedList (1000 elements) 300971LinkedList (100 000 elements)

3424(ms)

Page 65: JEEConf 2016. Effectiveness and code optimization in  Java applications

Lists

Page 66: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type Time(ns)ArrayList (1000 elements) 774ArrayList (100 000 elements)

144814

LinkedList (1000 elements) 2161LinkedList (100 000 elements)

292364

Page 67: JEEConf 2016. Effectiveness and code optimization in  Java applications

Comparison

Operations ArrayList LinkedList

AddDeleteGetIterate

Page 68: JEEConf 2016. Effectiveness and code optimization in  Java applications

Comparison

Page 69: JEEConf 2016. Effectiveness and code optimization in  Java applications

Comparison

Page 70: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type Time(ns)ArrayList (1000 elements) 49710ArrayList (100 000 elements)

632 754 873

LinkedList (1000 elements) 8507LinkedList (100 000 elements)

874 483

Page 71: JEEConf 2016. Effectiveness and code optimization in  Java applications

Speed Memory footprint

Big data structures

I/O support

Page 72: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type (elements) Time(ns)ArrayList (1000) 4732ArrayList (100 000) 387692LinkedList (1000) 5775LinkedList (100 000) 511646ObjectArrayList(1000) 3168ObjectArrayList(100 000) 322811

Page 73: JEEConf 2016. Effectiveness and code optimization in  Java applications

Lightweight

Hashing strategies

Primitive types

Hash table improvemen

ts

Page 74: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type (elements) Time(ns)ArrayList (1000) 4595ArrayList (100 000) 394645ObjectArrayList(1000) 328363ObjectArrayList(100 000) 3187TIntArrayList(1000) 189608TIntArrayList(100 000) 1925

Page 75: JEEConf 2016. Effectiveness and code optimization in  Java applications

LIFO

Page 76: JEEConf 2016. Effectiveness and code optimization in  Java applications

LIFO

LinkedList

Stack

ArrayDeque

Page 77: JEEConf 2016. Effectiveness and code optimization in  Java applications

Stack

Page 78: JEEConf 2016. Effectiveness and code optimization in  Java applications

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

Page 79: JEEConf 2016. Effectiveness and code optimization in  Java applications

Mapping

Page 80: JEEConf 2016. Effectiveness and code optimization in  Java applications

Mapping

Page 81: JEEConf 2016. Effectiveness and code optimization in  Java applications

Mapping

Page 82: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type Time(ns)HashMap 4,60EnumMap 3,40

Page 83: JEEConf 2016. Effectiveness and code optimization in  Java applications

Mapping

Page 84: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type Time(ns)HashMap 4,53EnumMap 3,40Direct usage 2,36

Page 85: JEEConf 2016. Effectiveness and code optimization in  Java applications

Loops vs Streams

Page 86: JEEConf 2016. Effectiveness and code optimization in  Java applications

Loops vs Streams

Page 87: JEEConf 2016. Effectiveness and code optimization in  Java applications

Measurements

Type 10 elements(ns)

1000 elements

100000 elements

For-each

85 8002 766765

Stream 147 11784 1103383

Page 88: JEEConf 2016. Effectiveness and code optimization in  Java applications

ConclusionCompiler and JIT optimizationSpeed and memory optimizationPrefer ArrayList/HashMapUse measurement tools

Page 89: JEEConf 2016. Effectiveness and code optimization in  Java applications

Theory

Page 90: JEEConf 2016. Effectiveness and code optimization in  Java applications
Page 91: JEEConf 2016. Effectiveness and code optimization in  Java applications
Page 92: JEEConf 2016. Effectiveness and code optimization in  Java applications
Page 93: JEEConf 2016. Effectiveness and code optimization in  Java applications

EnterpriseWeb server performanceDatabase programmingORM & DI frameworksREST servicesBuild management systems

Page 94: JEEConf 2016. Effectiveness and code optimization in  Java applications

Q&A

• Sergey Morenets, [email protected]