Effective Java applications

57
Effective Java applications Sergey Morenets, [email protected] October, 27 2015

Transcript of Effective Java applications

Effective Javaapplications

Sergey Morenets, [email protected], 27 2015

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

Agenda

Agenda• What is effectiveness?• Code samples• Measurements• Optimization

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• Depends on the application environment• Premature optimization is evil• Hardware-specific

Effectiveness

CPU utilization

Memory utilization

Network I/O utilization

Disk I/O utilization

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

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

Warm-up

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

Sample

Samples

Measurements

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

Samples

Measurements

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

Samples

Measurements

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

Samples

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

Samples

Measurements

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

Samples

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

Samples

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

Samples

Measurements

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

5,07

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

Samples

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

Samples

Samples

Measurements

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

72814

Samples

Samples

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

Samples

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

Samples

Samples

Measurements

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

LIFO

LIFO

Stack

LinkedList

ArrayDeque

Samples

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

Samples

Measurements

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

Samples

Measurements

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

Measurements

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

Sample

Sample

Measurements

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

381707

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

504231

Theory

Q&A

• Sergey Morenets, [email protected]