Refactoring to Java 8 (Devoxx UK)

Post on 11-Feb-2017

35,823 views 3 download

transcript

@trisha_gee#DevoxxUK

Refactoring to Java 8

Trisha Gee, JetBrains

@trisha_gee

trishagee.com

Why Java 8?

It’s Faster

•Performance Improvements in Common Data Structures

•Fork/Join Speed Improvements

•Changes to Support Concurrency

•…and more

http://bit.ly/refJ8

Easy to Parallelize

Fewer lines of code

Minimizes Errors

Safety Check

Test Coverage

Performance Tests

Decide on the Goals

Limit the Scope

Morphia

https://github.com/mongodb/morphia

Refactoring!

Lambda Expressions

Automatic Refactoring

•Predicate

•Comparator

•Runnable

•etc…

Abstract classes

Advanced Search

Collections & Streams

Automatic Refactoring

•For loop to collect

•For loop to forEach

•…with and without Streams

Manual Refactoring

Optional

But what about performance?

Lambdas

0

20

40

60

80

100

120

140

160

180

Op

s/m

sLambdas vs Anonymous Inner Classes

Anonymous Inner Class Lambda

http://www.oracle.com/technetwork/java/jvmls2013kuksen-2014088.pdf

0

2

4

6

8

10

12

14

16

18

20

single thread max threads

nse

c/o

p

Performance of Capture

anonymous(static) anonymous(non-static) lambda

0

50,000

100,000

150,000

200,000

250,000

300,000

350,000

400,000

450,000

500,000

Constant message Variable message

Op

s/m

sLogging Performance

Lambda Direct call

Streams vs Iteration

0

1

2

3

4

5

6

7

8

9

Op

s/m

sIterator vs Stream

for loop forEach()

Going parallel

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Serial Parallel

Tim

e Ta

ken

(se

con

ds)

map()

MacBook Surface

0

20

40

60

80

100

120

140

160

Serial Parallel

Tim

e Ta

ken

(m

illis

)findAny()

MacBook Surface

Optional

0

50,000

100,000

150,000

200,000

250,000

300,000

350,000

Value not null Value null

Op

s/m

sCompare Constant Field Value with Null

Null check Optional

0

50,000

100,000

150,000

200,000

250,000

300,000

Value not null Value null

Op

s/m

sCompare Variable Field Value with Null

Null check Optional

Summary

Sometimes new idioms decrease clutter

…but sometimes they don’t

Sometimes the new features improve performance

0

20

40

60

80

100

120

140

160

180

Op

s/m

sLambdas vs Anonymous Inner Classes

Anonymous Inner Class Lambda

…and sometimes they don’t

0

50,000

100,000

150,000

200,000

250,000

300,000

Value not null Value null

Op

s/m

sCompare Variable Field Value with Null

Null check Optional

Sometimes a new feature makes life easier

…sometimes not so much

Some refactoring can safely be done automatically

…often you need a human brain

Conclusion

Should you migrate your code to Java 8?

It Depends

Always remember what your goal is

And compare results to it

Understand what may impact performance

And if in doubt, measure

Code may magically improve

Or you may expose areas for improvement

Your tools can help you

But you need to apply your brain too

http://bit.ly/refJ8

@trisha_gee