java/scala lab 2016. Сергей Моренец: Способы повышения...

Post on 16-Jan-2017

213 Views

Category:

Software

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Effectiveness and code optimization

in Java applications

Sergey Morenets, sergey.morenets@gmail.comApril, 16 2016

About author• Works in IT since 2000• 13 year of Java SE/EE experience• Regular speaker at Java conferences• Author of “Development of Java applications”,

“Main errors in Java programming” and “Ideal code” books

• Founder of http://it-simulator.com• Java trainer and lector

IT-Discovery

Курсы Тренинги

Семинары

Мастер-классы

Preface

JDBC

Agenda

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

Ideal code

Concise Readable

Self-describing Reusable

Testable Modern

Flexible Scalable

Effective

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• Premature optimization is evil• Hardware-specific• The only aspect of the ideal code that affects

users

Premature optimization

Premature optimization

Premature optimization

Premature optimization

Premature optimization

Premature optimization

Effectiveness

CPU utilization

Memory utilization

Network I/O

utilizationDisk I/O

utilization

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

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

• http://www.javaspecialists.eu/

Why is it important?• Real-time systems• Time-consuming systems• Large volume data

Code optimization

Java compiler

JIT compiler

JVM

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 int execute(); Code: 0: iconst_2 1: istore_1 2: iconst_1 3: 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

Java

co

mpi

ler Dead code elimination

Constant folding

Fixed expression calculation

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

Warm-up

Environment• JMH 1.11.3• Maven 3.3.9• JDK 1.8.0.77• Intel Core i7, 4 cores, 16 GB

Measurements

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

Sample

Method vs Field

Measurements

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

Measurements

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

Strings

Measurements

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

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

Maps

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

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 structur

esI/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

Stack

LinkedList

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

Conclusion• Compiler and JIT optimization• Speed and memory optimization• Prefer ArrayList/HashMap• Use measurement tools

Theory

Q&A

• Sergey Morenets, sergey.morenets@gmail.com

top related