refactoring to java 8 (devoxx uk)

60
@trisha_gee #DevoxxUK Refactoring to Java 8 Trisha Gee, JetBrains @trisha_gee trishagee.com

Upload: trisha-gee

Post on 11-Feb-2017

35.824 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Refactoring to Java 8 (Devoxx UK)

@trisha_gee#DevoxxUK

Refactoring to Java 8

Trisha Gee, JetBrains

@trisha_gee

trishagee.com

Page 2: Refactoring to Java 8 (Devoxx UK)

Why Java 8?

Page 3: Refactoring to Java 8 (Devoxx UK)

It’s Faster

•Performance Improvements in Common Data Structures

•Fork/Join Speed Improvements

•Changes to Support Concurrency

•…and more

http://bit.ly/refJ8

Page 4: Refactoring to Java 8 (Devoxx UK)

Easy to Parallelize

Page 5: Refactoring to Java 8 (Devoxx UK)

Fewer lines of code

Page 6: Refactoring to Java 8 (Devoxx UK)

Minimizes Errors

Page 7: Refactoring to Java 8 (Devoxx UK)

Safety Check

Page 8: Refactoring to Java 8 (Devoxx UK)

Test Coverage

Page 9: Refactoring to Java 8 (Devoxx UK)

Performance Tests

Page 10: Refactoring to Java 8 (Devoxx UK)

Decide on the Goals

Page 11: Refactoring to Java 8 (Devoxx UK)

Limit the Scope

Page 12: Refactoring to Java 8 (Devoxx UK)

Morphia

https://github.com/mongodb/morphia

Page 13: Refactoring to Java 8 (Devoxx UK)

Refactoring!

Page 14: Refactoring to Java 8 (Devoxx UK)

Lambda Expressions

Page 15: Refactoring to Java 8 (Devoxx UK)

Automatic Refactoring

•Predicate

•Comparator

•Runnable

•etc…

Page 16: Refactoring to Java 8 (Devoxx UK)

Abstract classes

Page 17: Refactoring to Java 8 (Devoxx UK)

Advanced Search

Page 18: Refactoring to Java 8 (Devoxx UK)

Collections & Streams

Page 19: Refactoring to Java 8 (Devoxx UK)

Automatic Refactoring

•For loop to collect

•For loop to forEach

•…with and without Streams

Page 20: Refactoring to Java 8 (Devoxx UK)

Manual Refactoring

Page 21: Refactoring to Java 8 (Devoxx UK)

Optional

Page 22: Refactoring to Java 8 (Devoxx UK)
Page 23: Refactoring to Java 8 (Devoxx UK)

But what about performance?

Page 24: Refactoring to Java 8 (Devoxx UK)

Lambdas

Page 25: Refactoring to Java 8 (Devoxx UK)

0

20

40

60

80

100

120

140

160

180

Op

s/m

sLambdas vs Anonymous Inner Classes

Anonymous Inner Class Lambda

Page 26: Refactoring to Java 8 (Devoxx UK)

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

Page 27: Refactoring to Java 8 (Devoxx UK)

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

Page 28: Refactoring to Java 8 (Devoxx UK)

Streams vs Iteration

Page 29: Refactoring to Java 8 (Devoxx UK)

0

1

2

3

4

5

6

7

8

9

Op

s/m

sIterator vs Stream

for loop forEach()

Page 30: Refactoring to Java 8 (Devoxx UK)

Going parallel

Page 31: Refactoring to Java 8 (Devoxx UK)

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

Page 32: Refactoring to Java 8 (Devoxx UK)

0

20

40

60

80

100

120

140

160

Serial Parallel

Tim

e Ta

ken

(m

illis

)findAny()

MacBook Surface

Page 33: Refactoring to Java 8 (Devoxx UK)

Optional

Page 34: Refactoring to Java 8 (Devoxx UK)

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

Page 35: Refactoring to Java 8 (Devoxx UK)

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

Page 36: Refactoring to Java 8 (Devoxx UK)

Summary

Page 37: Refactoring to Java 8 (Devoxx UK)

Sometimes new idioms decrease clutter

Page 38: Refactoring to Java 8 (Devoxx UK)
Page 39: Refactoring to Java 8 (Devoxx UK)

…but sometimes they don’t

Page 40: Refactoring to Java 8 (Devoxx UK)
Page 41: Refactoring to Java 8 (Devoxx UK)

Sometimes the new features improve performance

Page 42: Refactoring to Java 8 (Devoxx UK)

0

20

40

60

80

100

120

140

160

180

Op

s/m

sLambdas vs Anonymous Inner Classes

Anonymous Inner Class Lambda

Page 43: Refactoring to Java 8 (Devoxx UK)

…and sometimes they don’t

Page 44: Refactoring to Java 8 (Devoxx UK)

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

Page 45: Refactoring to Java 8 (Devoxx UK)

Sometimes a new feature makes life easier

Page 46: Refactoring to Java 8 (Devoxx UK)
Page 47: Refactoring to Java 8 (Devoxx UK)

…sometimes not so much

Page 48: Refactoring to Java 8 (Devoxx UK)
Page 49: Refactoring to Java 8 (Devoxx UK)

Some refactoring can safely be done automatically

Page 50: Refactoring to Java 8 (Devoxx UK)
Page 51: Refactoring to Java 8 (Devoxx UK)

…often you need a human brain

Page 52: Refactoring to Java 8 (Devoxx UK)
Page 53: Refactoring to Java 8 (Devoxx UK)

Conclusion

Page 54: Refactoring to Java 8 (Devoxx UK)

Should you migrate your code to Java 8?

Page 55: Refactoring to Java 8 (Devoxx UK)

It Depends

Page 56: Refactoring to Java 8 (Devoxx UK)

Always remember what your goal is

And compare results to it

Page 57: Refactoring to Java 8 (Devoxx UK)

Understand what may impact performance

And if in doubt, measure

Page 58: Refactoring to Java 8 (Devoxx UK)

Code may magically improve

Or you may expose areas for improvement

Page 59: Refactoring to Java 8 (Devoxx UK)

Your tools can help you

But you need to apply your brain too

Page 60: Refactoring to Java 8 (Devoxx UK)

http://bit.ly/refJ8

@trisha_gee