Presentation is loading. Please wait.

Presentation is loading. Please wait.

Mohsen Zainalpour What`s New in Java 8 JUG.

Similar presentations


Presentation on theme: "Mohsen Zainalpour What`s New in Java 8 JUG."— Presentation transcript:

1 Mohsen Zainalpour zainalpour@yahoo.com What`s New in Java 8 JUG

2 2012/04/26M1 2012/06/14M2 2012/08/02M3 2012/09/13M4 2012/11/29M5 2013/01/31M6 2013/06/13M7Feature Complete 2013/09/05M8Developer Preview 2014/01/23M9Final Release Candidate 2014/03/18GAGeneral Availability JDK 8 Schedule and status

3 Major changes Agenda JUG Why is Java still changing? Type Annotations Lambda Project Date and Time API Compact Profiles 1 1 2 2 3 3 44 55

4 Java 8 Is Revolutionary, Java Is Back “ Lambda is the single largest upgrade to the programming model. Ever. It's larger even than Generics. It's the first time since the beginning of Java that we've done a carefully coordinated co-evolution of the virtual machine, the language and the libraries, all together. Yet the result still feels like Java. Mark Reinhold ( Chief Architect of the Java Platform Group at Oracle )

5 Java 8 Is Revolutionary, Java Is Back “ Lambda is the single largest upgrade to the programming model. Ever. It's larger even than Generics. It's the first time since the beginning of Java that we've done a carefully coordinated co-evolution of the virtual machine, the language and the libraries, all together. Yet the result still feels like Java. Mark Reinhold ( Chief Architect of the Java Platform Group at Oracle )

6 Lambda JSR 335

7 Why is Java still changing?

8

9

10

11

12

13

14 The changing computing background Increasingly dealing with big data (terabytes and up) and wishing to exploit multicore computers or computing clusters effectively to process this. And this means using: parallel processing parallel processing big datamulticore cloud computing

15 The Progress of Programming There`s been a lot of progress & Progress is being allowed to forget things!

16 The Progress of Programming There`s been a lot of progress: -Assemblers let us forget opcodes

17 The Progress of Programming There`s been a lot of progress: -Assemblers let us forget opcodes -Garbage collections let us forget memory management #include int main () { … buffer = (char*) malloc (i+1); … free (buffer); … }

18 The Progress of Programming So what about parallelism?

19 Why Can`t We Forget About Parallelism? Most of parallelism problems are doing bulk operations on collection and we keep writing code like this: int sum = 0; for (int i = 0; i < a.length; i++) { sum += a[i]; } int sum = 0; for (int i = 0; i < a.length; i++) { sum += a[i]; }  It is inherently serial

20 Why Can`t We Forget About Parallelism? If the processing of different elements is to proceed in parallel, it is the responsibility of the client code

21 Why Can`t We Forget About Parallelism? If the processing of different elements is to proceed in parallel, it is the responsibility of the client code n1n2n3n4n5n6n7n8n9………… sum1 sum2 sum3sum4

22 Why Can`t We Forget About Parallelism? If the processing of different elements is to proceed in parallel, it is the responsibility of the client code n1n2n3n4n5n6n7n8n9………… class Sum implements Callable { private final long from; private final long to; Sum(long from, long to) { this.from = from; this.to = to; } public Long call() { long acc = 0; for (long i = from; i <= to; i++) { acc = acc + i; } return acc; } sum1 sum2 sum3sum4

23 Why Can`t We Forget About Parallelism? If the processing of different elements is to proceed in parallel, it is the responsibility of the client code n1n2n3n4n5n6n7n8n9………… sum1 sum2 sum3sum4 ExecutorService executor = Executors.newFixedThreadPool(2); List > results = executor.invokeAll(asList( new Sum(1, 250), new Sum(251, 500), new Sum(551, 750), new Sum(751, 1000) )); for (Future result : results) { System.out.println(result.get()); }

24 Why Can`t We Forget About Parallelism? Sequential Parallel (assuming a quad core machine) Time t Thread 1 Thread 2 Thread 3 Thread 4 Done parallel Done sequential

25 Why Can`t We Forget About Parallelism? Let the Library Writers do it! Collection developers know the recursive structure of their data But right now they can`t use that knowledge

26 Why Can`t We Forget About Parallelism? Let the Library Writers do it! Collection developers know the recursive structure of their data But right now they can`t use that knowledge int sum = 0; for (Iterator itr = myList.iterator();itr.hasNext(); ) { sum += itr.next(); } int sum = 0; for (Iterator itr = myList.iterator();itr.hasNext(); ) { sum += itr.next(); } The problem is external iteration

27 Why Can`t We Forget About Parallelism? Internal Iteration Instead of this: int sum = 0; for (int i=0;i<myList.size();i++){ int a=myList.get(i); sum+=a; } Instead of this: int sum = 0; for (int i=0;i<myList.size();i++){ int a=myList.get(i); sum+=a; }

28 Why Can`t We Forget About Parallelism? Internal Iteration We`re going to write this: int [] sum = new int[1]; myList.forEach( … ); We`re going to write this: int [] sum = new int[1]; myList.forEach( … ); Instead of this: int sum = 0; for (int i=0;i<myList.size();i++){ int a=myList.get(i); sum+=a; } Instead of this: int sum = 0; for (int i=0;i<myList.size();i++){ int a=myList.get(i); sum+=a; }

29 Why Can`t We Forget About Parallelism? Internal Iteration Let the collection choose its iteration strategy - Parallel, serial, out-of-order, lazy, … We`re going to write this: int [] sum = new int[1]; myList.forEach( … ); We`re going to write this: int [] sum = new int[1]; myList.forEach( … ); Instead of this: int sum = 0; for (int i=0;i<myList.size();i++){ int a=myList.get(i); sum+=a; } Instead of this: int sum = 0; for (int i=0;i<myList.size();i++){ int a=myList.get(i); sum+=a; }

30 Why Can`t We Forget About Parallelism? Internal Iteration Let the collection choose its iteration strategy - Parallel, serial, out-of-order, lazy, … We`re going to write this: int [] sum = new int[1]; myList.forEach( a -> sum[0]+=a ); We`re going to write this: int [] sum = new int[1]; myList.forEach( a -> sum[0]+=a ); Instead of this: int sum = 0; for (int i=0;i<myList.size();i++){ int a=myList.get(i); sum+=a; } Instead of this: int sum = 0; for (int i=0;i<myList.size();i++){ int a=myList.get(i); sum+=a; }

31 Why Can`t We Forget About Parallelism? a -> sum[0]+=a

32 Lambda Project – JSR 335 JSR 335 (Lambda Project) aims to support programming in a multicore environment by adding closures and related features to the Java language.

33 What are Lambda Expressions (closures)? A lambda expression :

34 What are Lambda Expressions (closures)? is an anonymous method A lambda expression :

35 What are Lambda Expressions (closures)? is an anonymous method having an argument list A lambda expression : a ->

36 What are Lambda Expressions (closures)? is an anonymous method having an argument list a return type A lambda expression : a ->

37 What are Lambda Expressions (closures)? is an anonymous method having an argument list a return type and a body A lambda expression : a -> sum[0]+=a

38 What are Lambda Expressions (closures)? is an anonymous method having an argument list a return type and a body A lambda expression : sum[0] a -> sum[0]+=a and able to refer to values from the enclosing scope (closure)

39 What are Lambda Expressions (closures)? is an anonymous method having an argument list a return type and a body A lambda expression : sum[0] a -> sum[0]+=a and able to refer to values from the enclosing scope (closure) To pass behavior to the API as data

40 From Single Method Interface …. public interface Comparator { }

41 From Single Method Interface …. public interface Comparator { int compare(T o1, T o2); }

42 From Single Method Interface …. public interface Comparator { int compare(T o1, T o2); } Single Abstract Method (SAM)

43 From Single Method Interface …. public interface Comparator { int compare(T o1, T o2); } Single Abstract Method (SAM) Functional Interface

44 From Single Method Interface …. public interface Comparator { int compare(T o1, T o2); } Collections.sort(strings, new Comparator () { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } });

45 From Single Method Interface …. public interface Comparator { int compare(T o1, T o2); } Collections.sort(strings, new Comparator () { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } });

46 From Single Method Interface …. public interface Comparator { int compare(T o1, T o2); } Collections.sort(strings, new Comparator () { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } });  Bulky syntax  Confusion surrounding the meaning of names and this

47 … To Lambda Expressions Collections.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2));

48 … To Lambda Expressions Collections.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2));

49 … To Lambda Expressions Collections.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2)); Lambda expression are always converted to instance of a functional interface Comparator c = (s1, s2) -> s1.compareToIgnoreCase(s2)); No need of changing the JVM to create a new type for lambda expressions

50 … To Lambda Expressions Collections.sort(strings, new Comparator () { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } }); Collections.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2) );

51 … To Lambda Expressions Collections.sort(strings, new Comparator () { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } }); Collections.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2) );

52 Without more language support for parallel idioms, people will instinctively reach for serial idioms

53 External Iteration Sum of squares long sum = 0L; for (long i = 0; i < N; i++) { sum += i * i; }

54 Internal Iteration Sum of squares long sum = LongStream.range(0, N).map(i -> i * i).sum();

55 Internal Iteration Going parallel long sum = LongStream.range(0, N).parallel().map(i -> i * i).sum();

56 Parallel Streams A behavioral parameter (lambda) may be invoked concurrently – This constraint gives us “wiggle room” to optimize

57 Up the level of abstraction External iteration conflates what with howInternal iteration: more what; less howClient passes behavior to the API as dataLibrary is free to use Multiple threads Out-of- order execution Laziness

58 Lambdas in Java 8 Lambda Code as data (Simplicity) Multi-core processing / parallel processing Interface evolution Bulk data operations

59 Lambdas in Java 8

60 Date and Time API JSR 310

61 New Date and Time API History of Java Date/Time APIs Java.util.Date, java.util.Calendar -Strong candidates for the all-time worst Java platform library design Joda Time -Quality date and time library JSR-310 - Builds on experience of Joda Time

62 New Date and Time API Design Principles Immutable - Thread-safe, allows caching Fluent - easy to read, like a DSL LocalDate.of(2013,Month.JANUARY,09).withYear(2014);

63 New Date and Time API Time for Humans Field-base, designed for humans -Year,month,day,hour,minute,second -LocalDate,LocalDateTime,ZonedDateTime,Period …

64 New Date and Time API London 12:50 Los Angeles 16:20

65 New Date and Time API void flightTime() { LocalDate date = LocalDate.of(2013, Month.SEPTEMBER, 14); LocalTime takeoff = LocalTime.of(12, 50); LocalTime landing = LocalTime.of(16, 20); ZoneId LHR = ZoneId.of("Europe/London"); ZoneId SFO = ZoneId.of("America/Los_Angeles"); Duration flightTime = Duration.between( ZonedDateTime.of(date, takeoff, LHR), ZonedDateTime.of(date, landing, SFO)); System.out.println("Flight time: " + flightTime); }

66 Annotations JSR 308

67 Type Annotations  JSR-308 brings annotations on Type use  Are an enabler for the checkers framework Ex.: new @Interned MyObject(); myString = (@NonNull String) myObject; void monitorTemperature() throws @Critical TemperatureException {... }

68 Repeating Annotations  Before @Schedules ({ @Schedule(dayOfMonth="Last"), @Schedule(dayOfWeek="Fri", hour="23") )} public void doPeriodicCleanup() {... }

69 Repeating Annotations  Before @Schedules ({ @Schedule(dayOfMonth="Last"), @Schedule(dayOfWeek="Fri", hour="23") )} public void doPeriodicCleanup() {... }  After @Schedule(dayOfMonth="Last”) @Schedule(dayOfWeek="Fri", hour="23") public void doPeriodicCleanup() {... }

70 Java SE 8 Compact Profiles

71 SE Full JRE Hotspot VM Lang & Util Base Libraries Other Base Libraries Integration Libraries UI & Toolkits Optional Components Hotspot VM Base Compact1 Classes SE 8 Compact Profiles Compact2 Class libraries Compact3 Class libraries 1 2 3

72 Q&A

73 References Lambda http://stackoverflow.com/questions/220658/what-is-the-difference-between-a-closure-and-a-lambda http://openjdk.java.net/projects/lambda/ http://jcp.org/aboutJava/communityprocess/edr/jsr335/index2.html http://vimeo.com/48577033 (slides: http://www.slideshare.net/tkowalcz/java-gets-a-closure) http://datumedge.blogspot.co.uk/2012/06/java-8-lambdas.html http://www.theserverside.com/news/thread.tss?thread_id=68718 http://medianetwork.oracle.com/video/player/1785479333001 https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=6080 https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=5089 http://www.lektorium.tv/lecture/?id=14048 http://www.lektorium.tv/lecture/?id=14049 http://blog.xebia.com/2012/11/05/report-will-java-8s-lambda-change-the-face-of-the-world/ http://www.slideshare.net/fsarradin/java-8-lambda http://programmers.stackexchange.com/questions/173441/what-triggered-the-popularity-of-lambda-functions-in-modern- mainstream-programmi?newsletter=1&nlcode=29983% 7c903a http://www.slideshare.net/bje/java-closures * Collections http://www.javabeat.net/2012/05/enhanced-collections-api-in-java-8-supports-lambda-expressions/ http://cr.openjdk.java.net/~briangoetz/lambda/collections-overview.html http://architects.dzone.com/articles/java-collections-api

74 References Remove the Permanent Generation http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals/ http://javaeesupportpatterns.blogspot.com/2011/10/java-7-features-permgen-removal.html http://java.dzone.com/articles/busting-permgen-myths https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=5135 JSR 310: Date and Time API http://java.dzone.com/articles/introducing-new-date-and-time http://sourceforge.net/apps/mediawiki/threeten/index.php?title=ThreeTen http://www.infoq.com/news/2010/03/jsr-310 https://docs.google.com/document/pub?id=1rd8yplQZIRz3LxMzpVLuskr1b0HwBmK9PXpdgBYojSw http://sourceforge.net/apps/mediawiki/threeten/index.php?title=User_Guide https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=4350 General Java8 http://openjdk.java.net/projects/jdk8/features http://www.pcadvisor.co.uk/news/software/3401314/oracle-java-upgrades-still-worthwhile-despite-postponed-features/ http://dhruba.name/2011/07/06/oracle-discusses-java-7-8-new-features-on-video/ http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Java-8 http://www.parleys.com/#st=5&id=2850&sl=1 http://www.parleys.com/#st=5&id=2847 https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=2872 https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=10458

75 References Annotations https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=4469 https://blogs.oracle.com/abuckley/entry/jsr_308_moves_forward http://jcp.org/en/jsr/detail?id=308 http://openjdk.java.net/jeps/120 http://types.cs.washington.edu/checker-framework/


Download ppt "Mohsen Zainalpour What`s New in Java 8 JUG."

Similar presentations


Ads by Google