Getting ready to java 8

106
Getting ready to Java 8 Сергей Моренец, [email protected] 24 июля 2014 г.

description

Сергей Моренец «Новые возможности Java 8», JUG#8 (Днепропетровск)

Transcript of Getting ready to java 8

Page 1: Getting ready to java 8

Getting readyto Java 8

Сергей Моренец, [email protected] июля 2014 г.

Page 2: Getting ready to java 8

About author• Works in IT since 2000• 11 year of Java SE/EE experience• Occupied senior Java developer/Team Lead

positions• Winner of 2013 JBoss Community Recognition

Award. https://www.jboss.org/jbcra

Page 3: Getting ready to java 8

About author• 6 times speaker at Odessa Java User Group• 2 times speaker at JEEConf (2013 and 2014) in

Kiev• Speaker at Java Breeze 2013 in Odessa• Speaker at Java Day 2014 in Minsk• Works 2 years as Java lector

Page 4: Getting ready to java 8

Java 8• Java 8 has been influenced by Scala much more

than how Scala has been influenced by Java• Most expected Java release ever

Page 5: Getting ready to java 8

JVM-based languages

Page 6: Getting ready to java 8

Functional languages

Page 7: Getting ready to java 8

Java 8• Code name Kenai• Specification JSR-337• Inspired by Scala, Google Guava and Joda Time

Page 8: Getting ready to java 8

Java 8• Project Lambda• Streams API• Functional interfaces• Java time• Method references• Repeatable & time annotations• Nashorn• Accumulators

Page 9: Getting ready to java 8

Java 8• Method Thread.stop() was deprecated in 1998

and rewritten to throw exception in 2014.

Page 10: Getting ready to java 8

Schedule• 2012/04/26 M1 • 2012/06/14 M2 • 2012/08/02 M3 • 2012/09/13 M4 • 2012/11/29 M5 • 2013/01/31 M6 • 2013/06/13 Feature Complete• 2013/09/05 Developer Preview• 2014/01/23 Final Release Candidate• 2014/03/18 General Availability

Page 11: Getting ready to java 8

Java 7

Page 12: Getting ready to java 8

Java 7

Page 13: Getting ready to java 8

Project Lambda

Page 14: Getting ready to java 8

Project Lambda

Page 15: Getting ready to java 8

Project Lambda

Page 16: Getting ready to java 8

Java 7

Page 17: Getting ready to java 8

Project Lambda

Page 18: Getting ready to java 8

Project Lambda

Page 19: Getting ready to java 8

Java 7

Page 20: Getting ready to java 8

Project Lambda

Page 21: Getting ready to java 8

Project Lambda

Page 22: Getting ready to java 8

Project Lambda• Lambdas are not serializable• Applied to functional interfaces(with SAM)• Cannot use this• Not applied to abstract classes(even with SAM)

Page 23: Getting ready to java 8

Project Lambda• Function• Predicate• Consumer• Supplier• BinaryOperator

Page 24: Getting ready to java 8

Project Lambda

Interface DescriptionFunction Function with single

argument and resultPredicate Tests condition of

single argumentConsumer Performs operation

over single argumentSupplier Supplies results BinaryOperator Functions with two

arguments and results

Page 25: Getting ready to java 8

Lambda vs Anonymous

Page 26: Getting ready to java 8

Lambda vs Anonymous

Page 27: Getting ready to java 8

Lambda vs Anonymous

Page 28: Getting ready to java 8

Lambda vs Anonymous

Type Lambdas(ms)

Anonymous classes (ms)

Execution

364 329

Capturing

316 309

Linkage 354 313

Page 29: Getting ready to java 8

Disadvantage

Page 30: Getting ready to java 8

Java 7

Page 31: Getting ready to java 8

Method reference

Page 32: Getting ready to java 8

Method reference

Page 33: Getting ready to java 8

Java 7

Page 34: Getting ready to java 8

Streams

Page 35: Getting ready to java 8

Streams

Page 36: Getting ready to java 8

Streams

Page 37: Getting ready to java 8

Streams

Page 38: Getting ready to java 8

Java 7

Page 39: Getting ready to java 8

Streams

Page 40: Getting ready to java 8

Streams• Sequential• Parallel

Page 41: Getting ready to java 8

Streams

Page 42: Getting ready to java 8

Performance

Page 43: Getting ready to java 8

PerformanceOperation Sequential,

secParallel,sec

Slow operation 1.0 0.4Quick operation 0.3 2.4

Page 44: Getting ready to java 8

Parallelism level

Page 45: Getting ready to java 8

Parallelism level• Parallel streams use ForkJoinPool to split and

combine tasks• By default number of threads is equal to number

of processors• This behavior may be overridden by changing

system property java.util.concurrent.ForkJoinPool.common.parallelism

Page 46: Getting ready to java 8

Streams

Page 47: Getting ready to java 8

Streams

Page 48: Getting ready to java 8

Streams

Page 49: Getting ready to java 8

Streams

Page 50: Getting ready to java 8

Java 7

Page 51: Getting ready to java 8

Streams

Page 52: Getting ready to java 8

Stream performance

Page 53: Getting ready to java 8

Stream performance

Page 54: Getting ready to java 8

Iteration test

Use case Time(ms)For-each loop 35forEach(lambda) 79forEach(consumer) 12

Page 55: Getting ready to java 8

Java 7

Page 56: Getting ready to java 8

Default methods

Page 57: Getting ready to java 8

Default methods

Page 58: Getting ready to java 8

Default methods

Page 59: Getting ready to java 8

Default methods• equals• hashCode• toString

Page 60: Getting ready to java 8

Java 7

Page 61: Getting ready to java 8

Java 7

Page 62: Getting ready to java 8

Java 7

Page 63: Getting ready to java 8

Optional

Page 64: Getting ready to java 8

Optional

Page 65: Getting ready to java 8

Optional

Page 66: Getting ready to java 8

Construct date

Page 67: Getting ready to java 8

Java 7

Page 68: Getting ready to java 8

Java Time

Page 69: Getting ready to java 8

Java Time

Page 70: Getting ready to java 8

Java Time

Page 71: Getting ready to java 8

Java Time

Page 72: Getting ready to java 8

Java 7

Page 73: Getting ready to java 8

Java Time

Page 74: Getting ready to java 8

Time difference

Page 75: Getting ready to java 8

Java Time

Page 76: Getting ready to java 8

I/O

Page 77: Getting ready to java 8

I/O

Page 78: Getting ready to java 8

Encoding

Page 79: Getting ready to java 8

Annotations

Page 80: Getting ready to java 8

Annotations

Page 81: Getting ready to java 8

Repeatable annotations

Page 82: Getting ready to java 8

Repeatable annotations

Page 83: Getting ready to java 8

Repeatable annotations

Page 84: Getting ready to java 8

Annotations• Up to Java 7, an annotation was applied to a

declaration. • A declaration is a part of code that introduces a

new name.

Page 85: Getting ready to java 8

Annotations• Type• Method• Field• Annotation• Package• Local variable

Page 86: Getting ready to java 8

Type annotations

Page 87: Getting ready to java 8

Type annotations• In Java 8, you can annotate any type use. • This can be useful in combination with tools that

check for common programming errors

Page 88: Getting ready to java 8

Type annotations

Page 89: Getting ready to java 8

Type annotations• Generic type arguments• Superclass and implemented interface• Constructor invocations• Casting and instanceof• Exception specifications• Wild card and type bounds

Page 90: Getting ready to java 8

Type annotations

Page 91: Getting ready to java 8

Nashorn

Page 92: Getting ready to java 8

Nashorn• Based on Da Vinci Machine• Intends to enable Java developers embedding of

JavaScript in Java applications• Successor of JavaScript Rhino engine which was

started in 1997 by Netscape and maintained by Mozilla.

Page 93: Getting ready to java 8

Java 7

Page 94: Getting ready to java 8

Nashorn

Page 95: Getting ready to java 8

Performance

Operation Rhino(Java 7) ,sec Nashorn (Java 8)print 3.1 0.9String operations 1.0 0.4Math operations 1.4 0.1

Page 96: Getting ready to java 8

Collections• Improved HashMap• Balanced tree to avoid high collisions

Page 97: Getting ready to java 8

Collections

Page 98: Getting ready to java 8

Collections

Page 99: Getting ready to java 8

Performance

Number of items Java 7,ms Java 81000 7 95000 67 4715000 653 40630000 2645 125250000 7842 3820

Page 100: Getting ready to java 8

Accumulators• Scalable updatable variables. Maintaining a single

count, sum, etc., that is updated by possibly many threads is a common scalability problem.

• Added features that make ConcurrentHashMap and classes built from them more useful as caches. Better support for maps with large numbers of elements.

• Added functionality and improved performance for ForkJoinPool

Page 101: Getting ready to java 8

Benchmark

Page 102: Getting ready to java 8

Benchmark

Page 103: Getting ready to java 8

Benchmark

Page 104: Getting ready to java 8

Benchmark

Number of threads

AtomicLong LongAdder

1 236 1772 586 1384 590 468 501 4916 438 4832 459 52

Page 105: Getting ready to java 8

Metaspace• Replacement of Permanent Generation• New JVM arguments• Resides in the heap and can be resized

Page 106: Getting ready to java 8

Q&A

• Сергей Моренец, [email protected]