102
Effectiveness and code optimization in Java Sergey Morenets, [email protected] December, 4 2015

Effectiveness and code optimization in Java

Embed Size (px)

Citation preview

Page 1: Effectiveness and code optimization in Java

Effectiveness and code optimization

in Java

Sergey Morenets, [email protected], 4 2015

Page 2: Effectiveness and code optimization in Java

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

Page 3: Effectiveness and code optimization in Java

Preface

Page 4: Effectiveness and code optimization in Java

Agenda

Page 5: Effectiveness and code optimization in Java

Agenda• What is effectiveness?• Code optimization• JVM optimization• Code samples• Measurements

Page 6: Effectiveness and code optimization in Java

Ideal code

Concise Readable Self-describing

Reusable Testable Modern

Flexible Scalable Effective

Page 7: Effectiveness and code optimization in Java

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• The only aspect of the ideal code that affects

users

Page 8: Effectiveness and code optimization in Java

Premature optimization

Page 9: Effectiveness and code optimization in Java

Premature optimization

Page 10: Effectiveness and code optimization in Java

Premature optimization

Page 11: Effectiveness and code optimization in Java

Premature optimization

Page 12: Effectiveness and code optimization in Java

Premature optimization

Page 13: Effectiveness and code optimization in Java

Effectiveness

CPU utilization

Memory utilization

Network I/O

utilizationDisk I/O

utilization

Page 14: Effectiveness and code optimization in Java

Effectiveness• Can be measured• Can be static or dynamic• Can be tuned

Page 15: Effectiveness and code optimization in Java

Tuning• JVM options• Metaspace/heap/stack size• Garbage collector options• http://

blog.sokolenko.me/2014/11/javavm-options-production.html

• http://www.javaspecialists.eu/

Page 16: Effectiveness and code optimization in Java

Code optimization

Java compiler

JIT compiler

JVM

Page 17: Effectiveness and code optimization in Java

Code optimization

Page 18: Effectiveness and code optimization in Java

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

Page 19: Effectiveness and code optimization in Java

Code optimization

Page 20: Effectiveness and code optimization in Java

Code optimization public int execute(); Code: 0: iconst_2 1: istore_1 2: iconst_1 3: ireturn

Page 21: Effectiveness and code optimization in Java

Code optimization

Page 22: Effectiveness and code optimization in Java

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

Page 23: Effectiveness and code optimization in Java

Code optimization

Page 24: Effectiveness and code optimization in Java

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

Page 25: Effectiveness and code optimization in Java

Code optimization

Page 26: Effectiveness and code optimization in Java

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

Page 27: Effectiveness and code optimization in Java

Code optimization

Page 28: Effectiveness and code optimization in Java

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 29: Effectiveness and code optimization in Java

Code optimization

Page 30: Effectiveness and code optimization in Java

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

Page 31: Effectiveness and code optimization in Java

Code optimization

Page 32: Effectiveness and code optimization in Java

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

Page 33: Effectiveness and code optimization in Java

Java compiler

Dead code elimination

Constant folding

Fixed expression calculation

Page 34: Effectiveness and code optimization in Java

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

Page 35: Effectiveness and code optimization in Java

Warm-up

Page 36: Effectiveness and code optimization in Java

Environment• JMH 1.11.1• Maven 3.3.3• JDK 1.8.0.65• Intel Core i7, 4 cores, 16 GB

Page 37: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Multiply 4 2,025Shift 2,024

Page 38: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Multiply 17 2,04Shift 2,04

Page 39: Effectiveness and code optimization in Java

Sample

Page 40: Effectiveness and code optimization in Java

Method vs Field

Page 41: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Field 1,945Method 1,933

Page 42: Effectiveness and code optimization in Java
Page 43: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Static 2,17Instance 2,30

Page 44: Effectiveness and code optimization in Java

Increment

Page 45: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Addiction 2,06Incrementation 2,06

Page 46: Effectiveness and code optimization in Java

Swap

Page 47: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Standard 2,10Addiction 2,08XOR 2,04

Page 48: Effectiveness and code optimization in Java

Conditions

Page 49: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Ternary operation 2,05If operator 2,03

Page 50: Effectiveness and code optimization in Java

Parsing

Page 51: Effectiveness and code optimization in Java

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

Page 52: Effectiveness and code optimization in Java

Copying arrays

Page 53: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Loop(1000 elements) 52,6arrayCopy(1000 elements) 45,6Loop(100 000 elements) 21666arrayCopy(100 000 elements)

21707

Loop(10 000 000 elements) 6432557arrayCopy(10 000 000 elements)

6616976

Page 54: Effectiveness and code optimization in Java
Page 55: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Rows(10 elements) 37Columns(10 elements) 67Rows(100 elements) 2954Columns(100 elements) 5567Rows(1000 elements) 264340Columns(1000 elements) 1300244Rows(5000 elements) 9,6(ms)Columns(5000 elements) 387(ms)

Page 56: Effectiveness and code optimization in Java

Strings

Page 57: Effectiveness and code optimization in Java

Measurements

Type Time(ns)+ 7,62Concat 13,4StringBuffer 7,32StringBuilder 7,24

Page 58: Effectiveness and code optimization in Java

Maps

Page 59: Effectiveness and code optimization in Java

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

Page 60: Effectiveness and code optimization in Java

Arrays

Page 61: Effectiveness and code optimization in Java

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 62: Effectiveness and code optimization in Java

Arrays

Page 63: Effectiveness and code optimization in Java

Measurements

Type Time(ns)For (10 elements) 5,04For optimized(10 elements)

5,07

For (1000 elements) 258,9For-each (1000 elements) 258,7

Page 64: Effectiveness and code optimization in Java

Arrays

Page 65: Effectiveness and code optimization in Java

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 66: Effectiveness and code optimization in Java

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 67: Effectiveness and code optimization in Java

Exceptions

Page 68: Effectiveness and code optimization in Java

Measurements

Type Time(ns)If 2,40Exceptions 2,47

Page 69: Effectiveness and code optimization in Java

Strings

Page 70: Effectiveness and code optimization in Java

Strings

Page 71: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Parse(1000 tokens) 12239Parse with intern(1000 tokens)

72814

Page 72: Effectiveness and code optimization in Java

Arrays

Page 73: Effectiveness and code optimization in Java

Bitset

Page 74: Effectiveness and code optimization in Java

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

Page 75: Effectiveness and code optimization in Java

Bitset

Page 76: Effectiveness and code optimization in Java

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

Page 77: Effectiveness and code optimization in Java

Collections

Page 78: Effectiveness and code optimization in Java

Collections

Page 79: Effectiveness and code optimization in Java

Measurements

Type Time(ns)New ArrayList() 3,6emptyList() 2,4

Page 80: Effectiveness and code optimization in Java

Autoboxing

Page 81: Effectiveness and code optimization in Java

Measurements

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

Page 82: Effectiveness and code optimization in Java

LIFO

Page 83: Effectiveness and code optimization in Java

LIFOStack

LinkedList

ArrayDeque

Page 84: Effectiveness and code optimization in Java

Stack

Page 85: Effectiveness and code optimization in Java

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 86: Effectiveness and code optimization in Java

Collections

Page 87: Effectiveness and code optimization in Java

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 88: Effectiveness and code optimization in Java

Reflection

Page 89: Effectiveness and code optimization in Java

Reflection

Type Time(ns)instanceof 2,266isAssignableFrom 2,146== 2,401

Page 90: Effectiveness and code optimization in Java

Reflection

Page 91: Effectiveness and code optimization in Java

Measurements

Type Time(ns)New object 3,0Reflection 5,4

Page 92: Effectiveness and code optimization in Java

Reflection

Page 93: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Method call 0,3Reflection 232

Page 94: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Method call 0,3Reflection (cached) 3,1

Page 95: Effectiveness and code optimization in Java

Cloning

Page 96: Effectiveness and code optimization in Java

Measurements

Type Time(ns)Clone 6,5Direct copying 3,8

Page 97: Effectiveness and code optimization in Java

Sample

Page 98: Effectiveness and code optimization in Java

Lists

Page 99: Effectiveness and code optimization in Java

Measurements

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

381707

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

504231

Page 100: Effectiveness and code optimization in Java

JIT optimization• Inline methods• Eliminate locks• Replace interface with direct method calls• Join synchronized blocks• Eliminate dead code• Drop memory write for non-volatile variables

Page 101: Effectiveness and code optimization in Java

Theory

Page 102: Effectiveness and code optimization in Java

Q&A

• Sergey Morenets, [email protected]