refactoring to java 8 (devoxx uk)
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
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