• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
J1 la-2011-se-tech-keynote
 

J1 la-2011-se-tech-keynote

on

  • 697 views

Java SE: Rebuilding the Momentum (Java 7 and Java SE 8: Features and Plans)

Java SE: Rebuilding the Momentum (Java 7 and Java SE 8: Features and Plans)

Statistics

Views

Total Views
697
Views on SlideShare
696
Embed Views
1

Actions

Likes
0
Downloads
9
Comments
0

1 Embed 1

http://a0.twimg.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    J1 la-2011-se-tech-keynote J1 la-2011-se-tech-keynote Presentation Transcript

    • The Java SE Platform: Rebuilding Momentum Terrence Barr Senior Technologist, Oracle @terrencebarr | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved. | Insert Information Protection Policy Classification from Slide 8Thursday, December 15, 2011
    • http://javaspotlight.org @javaspotlight 2 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Mark Reinhold Cameron Purdy Adam Bein Adam Messinger JimBateman Joe Laskey Bruno Souza Alex Buckley Stuart Darcy Mike Marks Alan Duigou http://javaspotlight.org @javaspotlight 2 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Safe Harbor Statement 3 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Safe Harbor Statement The preceding and following material is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. 3 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Priorities for our Java PlatformsThursday, December 15, 2011
    • Priorities for our Java Platforms Grow developer baseThursday, December 15, 2011
    • Priorities for our Java Platforms Grow developer baseThursday, December 15, 2011
    • Priorities for our Java Platforms Grow developer base Grow adoptionThursday, December 15, 2011
    • Priorities for our Java Platforms Grow developer base Grow adoptionThursday, December 15, 2011
    • Priorities for our Java Platforms Grow developer base Grow adoption Increase competitivenessThursday, December 15, 2011
    • Priorities for our Java Platforms Grow developer base Grow adoption Increase competitivenessThursday, December 15, 2011
    • Priorities for our Java Platforms Grow developer base Grow adoption Increase competitiveness Adapt to changeThursday, December 15, 2011
    • Priorities for our Java Platforms Grow developer base Grow adoption Increase competitiveness Adapt to changeThursday, December 15, 2011
    • 5 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 5 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 6 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework Project Jigsaw Project Lambda (JSR 335) 6 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework Project Jigsaw Strict Verification Project Lambda (JSR 335) Type Annotations (JSR 308) Parallel Class Loaders Unicode 6.0 JDBC 4.1 Bulk-Data Operations Enhanced Locales XRender Pipeline Phasers SDP & SCTP Swing JLayer Transfer Queues TLS 1.2 Swing Nimbus More New I/O (JSR 203) ECC 6 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework Mid 2012 Project Jigsaw Strict Verification Project Lambda (JSR 335) Type Annotations (JSR 308) Parallel Class Loaders Unicode 6.0 JDBC 4.1 Bulk-Data Operations Enhanced Locales XRender Pipeline Phasers SDP & SCTP Swing JLayer Transfer Queues TLS 1.2 Swing Nimbus More New I/O (JSR 203) ECC 6 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework Mid 2012 Project Jigsaw Strict Verification Project Lambda Type Annotations (JSR 308) Parallel Class Loaders Unicode 6.0 JDBC 4.1 Bulk-Data Operations Enhanced Locales XRender Pipeline Phasers SDP & SCTP Swing JLayer Transfer Queues TLS 1.2 Swing Nimbus More New I/O (JSR 203) ECC 6 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework Mid 2012 Project Jigsaw Strict Verification SDP & SCTP Project Lambda Parallel Class Loaders TLS 1.2 Phasers ECC Transfer Queues JDBC 4.1 Type Annotations (JSR 308) More New I/O (JSR 203) XRender Pipeline Bulk-Data Operations Unicode 6.0 Swing JLayer Enhanced Locales Swing Nimbus 6 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework Mid 2011 Project Jigsaw Strict Verification SDP & SCTP Project Lambda Parallel Class Loaders TLS 1.2 Phasers ECC Transfer Queues JDBC 4.1 Type Annotations (JSR 308) More New I/O (JSR 203) XRender Pipeline Bulk-Data Operations Unicode 6.0 Swing JLayer Enhanced Locales Swing Nimbus 6 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 8 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework Mid 2011 Strict Verification SDP & SCTP Project Jigsaw Parallel Class Loaders TLS 1.2 Phasers ECC Project Lambda Transfer Queues JDBC 4.1 Type Annotations (JSR 308) More New I/O (JSR 203) XRender Pipeline Bulk-Data Operations Unicode 6.0 Swing JLayer Enhanced Locales Swing Nimbus 6 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • JDK 7 Schedule 7 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • JDK 7 Schedule 2010/12/16 Feature Complete 2011/04/12 Rampdown start: P1-P3 bugs only 2011/04/28 API/interface changes: Showstoppers only 2011/05/11 All targeted bugs addressed First release candidate built 2011/05/18 Bug fixes: Showstoppers only 2011/06/08 Final test cycle starts 2011/07/28 General Availability 7 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Four JSRs 8 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Four JSRs 1,966 Enhancements 8 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Four JSRs 1,966 Enhancements 9,494 Bug Fixes 8 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Four JSRs 1,966 Enhancements 9,494 Bug Fixes 9,018 Mercurial Changesets 8 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Four JSRs 1,966 Enhancements 9,494 Bug Fixes 9,018 Mercurial Changesets 147 Builds 8 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Four JSRs 1,966 Enhancements 9,494 Bug Fixes 9,018 Mercurial Changesets 147 Builds Four years, seven months, and seventeen days … 8 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Four JSRs Java 7 1,966 Enhancements 9,494 Bug Fixes 9,018 Mercurial Changesets 147 Builds 2011/7/28 Four years, seven months, and seventeen days … 8 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 InvokeDynamic (JSR 292) 9 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework (JSR 166y) NIO.2 (JSR 203) 9 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 10 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • http://www.flickr.com/photos/chefranden/908539119/ 10 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 11 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Map<String,String> map = new HashMap<String,String>(); 11 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Map<String,Map<Integer,String>> map = new HashMap<String,Map<Integer,String>> (); 11 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Map<String,Map<Integer,List<String>>> map = new HashMap<String,Map<Integer,List<String>>>(); 11 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // Diamond Map<String,Map<Integer,List<String>>> map = new HashMap<String,Map<Integer,List<String>>>(); 11 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011 <>
    • // Diamond Map<String,Map<Integer,List<String>>> map = new HashMap<>(); 11 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // Diamond Map<String,Map<Integer,List<String>>> map; // ... map = new HashMap<>(); 11 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // Diamond Map<String,Map<Integer,List<String>>> foo() { return new HashMap<>(); } 11 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 12 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • if (s.equals("foo")) doFoo(); else if (s.equals( "bar")) doBar(); else if (s.equals( "baz")) doBaz(); else throw new IllegalArgumentException(s); 12 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // Strings in switch switch (s) { case "foo": doFoo(); break; case "bar": doBar(); break; case "baz": doBaz(); break; default: throw new IllegalArgumentException(s); } 12 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 13 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • try { // ... } 13 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • try { // ... } catch (IOException x) { logger.log(SEVERE, "Unexpected failure", x); throw x; } 13 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • try { // ... } catch (IOException x) { logger.log(SEVERE, "Unexpected failure", x); throw x; } catch (SQLException x) { logger.log(SEVERE, "Unexpected failure", x); throw x; } 13 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // Multi-catch try { // ... } catch (IOException | SQLException x) { logger.log(SEVERE, "Unexpected failure", x); throw x; } catch ( x) { logger.log(SEVERE, "Unexpected failure", x); throw x; } 13 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // Multi-catch try { // ... } catch (IOException | SQLException x) { logger.log(SEVERE, "Unexpected failure", x); throw x; } 13 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 14 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • static void copy(Path src, Path dst) throws IOException { InputStream in = Files.newInputStream(src); OutputStream out = Files.newOutputStream(dst); byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } 14 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • static void copy(Path src, Path dst) throws IOException { InputStream in = Files.newInputStream(src); OutputStream out = Files.newOutputStream(dst); byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } 15 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • static void copy(Path src, Path dst) throws IOException { InputStream in = Files.newInputStream(src); OutputStream out = Files.newOutputStream(dst); try { byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { in.close(); out.close(); } } 15 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • static void copy(Path src, Path dst) throws IOException { InputStream in = Files.newInputStream(src); OutputStream out = Files.newOutputStream(dst); try { byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); ✘ } finally { in.close(); out.close(); } } 15 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • static void copy(Path src, Path dst) throws IOException { InputStream in = OutputStream out = try { Files.newInputStream(src); Files.newOutputStream(dst); byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { in.close(); out.close(); } } 16 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • static void copy(Path src, Path dst) throws IOException { InputStream in = null; OutputStream out = null; try { in = Files.newInputStream(src); out = Files.newOutputStream(dst); byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { if (in != null) in.close(); if (out != null) out.close(); } } 16 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • static void copy(Path src, Path dst) throws IOException { InputStream in = Files.newInputStream(src); try {= OutputStream out = Files.newOutputStream(dst);= byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); out.close(); } } finally { in.close(); } } 17 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Thursday, December 15, 2011
    • static void copy(Path src, Path dst) throws IOException { InputStream in = Files.newInputStream(src); try { OutputStream out = Files.newOutputStream(dst); try { byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { out.close(); } } finally { in.close(); } } 17 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • static void copy(Path src, Path dst) throws IOException {{ InputStream in = Files.newInputStream(src); OutputStream out = Files.newOutputStream(dst);{ byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); ? }} 18 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Thursday, December 15, 2011
    • // Try-with-resources static void copy(Path src, Path dst) throws IOException { try ( ) InputStream in = Files.newInputStream(src); OutputStream out = Files.newOutputStream(dst); byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); ? } 18 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // Try-with-resources static void copy(Path src, Path dst) throws IOException { try ( InputStream in = Files.newInputStream(src); OutputStream out = Files.newOutputStream(dst); ) byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); ? } 18 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // Try-with-resources static void copy(Path src, Path dst) throws IOException { try (InputStream in = Files.newInputStream(src); OutputStream out = Files.newOutputStream(dst); ) { byte[] buf = new byte[BUFSIZ]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } ? } 18 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // Try-with-resources 19 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // Try-with-resources package java.lang; public interface AutoCloseable { public void close() throws IOException; } 19 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 19 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • package foo; class FooResource implements AutoCloseable { // ... public void close() { // ... } } 19 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 20 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • -th row ise re b) Excep tion Pre c ean SQL // ool on, ow(b epti thr Exc re IO x); void rows e", t h fai lur { ted { x) nexpec r y { .. ion , "U t . ept ERE // h (Exc SEV atc r.log( } c gge lo w x; t hro } } 20 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // L iter als -th row byte ise re b) Excep tion b = (byt Pre c ean SQL e)0b // ool on, int 1010 ow(b epti thr Exc magi c = 1010 re IO x); 0xCA ; void rows e", long FE_B t h fai lur max = 0x ABE; { ted 7fff { x) nexpec _fff r y { .. ion , "U f_ff t . ept ERE ff_f // h (Exc SEV fff atc r.log( } c gge L; lo w x; t hro } } 20 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // L iter als -th row byte ise re b) Excep tion b = (byt Pre c ean SQL e)0b // ool on, int 1010 ow(b epti thr Exc magi c = 1010 re IO x); 0xCA ; void rows e", long FE_B t h fai lur max = 0x ABE; { ted 7fff { x) nexpec _fff r y { .. ion , "U f_ff t . ept ERE ff_f // h (Exc SEV fff atc r.log( } c gge L; // Safe varargs lo w x; t hro @SafeVarargs } static <T> void addTo List3 (List<T> listAr } g, { T ... elements) for (T x : elements) { listArg.add(x); } } 20 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 21 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 22 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework 23 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework NIO.2 (JSR 203) 23 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 24 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Luck FScript Bex Script Forth foo Lisp JRuby Funnel CAL Scala C# Pascal Sather Drools Tea JudoScript Ada Dawn Zigzag Rexx Mini v-language BeanShell Scheme G Jython TermWare JavaScript Tiger iScript Processing Icon LLP Oberon SALSA Basic Tcl PHP E Smalltalk Hojo JHCR Logo Groovy Yoix Yassl Piccola Simkin Clojure WebL Prolog JESS Eiffel Phobos PLAN Correlate Modula-2 Nice ObjectScript Pnuts Anvil Jickle Sleep Present 24 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 25 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Ruby = Method Calls Lots and lots and lots of ʼem … 25 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 26 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • def foo bar end def bar baz end def baz # ... end 26 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • JRuby on Java 5/6 def foo bar end JRuby JRuby def bar foo call bar call baz baz logic logic end def baz # ... end Kills many JVM optimizations 26 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • JRuby on Java 7 with InvokeDynamic def foo bar end def bar foo bar baz baz end def baz # ... end Straight-through dispatch paths 26 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • JRuby on Java 7 with InvokeDynamic def foo bar end def bar foo bar bar baz baz baz end def baz # ... end Optimizations (like inlining) can happen! 26 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Times faster than Ruby 1.9.3 15 14.2x 12 8 7.4x 5.5x 4.4x 5 3.6x 3.5x 3.2x 2.7x 1.7x 1.8x 1.6x 1.9x 1 fib +calls +consts +both richards redblack JRuby on Java 6 JRuby on invokedynamic 27 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework 28 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework NIO.2 (JSR 203) 28 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 29 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 29 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 30 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 1. Keep all the processor cores busy 30 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 1. Keep all the processor cores busy 2. Minimize synchronization overhead 30 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 1. Keep all the processor cores busy 2. Minimize synchronization overhead 3. Scale linearly as the number of cores increases 30 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 31 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 31 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 31 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 31 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 31 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 31 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 31 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 31 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 31 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 32 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Result compute(Task t) { } 32 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Result compute(Task t) { if (t.size() < SEQUENTIAL_THRESHOLD) { } } 32 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Result compute(Task t) { if (t.size() < SEQUENTIAL_THRESHOLD) { return t.computeSequentially(); } } 32 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Result compute(Task t) { if (t.size() < SEQUENTIAL_THRESHOLD) { return t.computeSequentially(); } else { Result left, right; left = compute(p.leftHalf()); right = compute(p.rightHalf()); } } 32 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Result compute(Task t) { if (t.size() < SEQUENTIAL_THRESHOLD) { return t.computeSequentially(); } else { Result left, right; left = compute(p.leftHalf()); right = compute(p.rightHalf()); return combine(left, right); } } 32 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Result compute(Task t) { if (t.size() < SEQUENTIAL_THRESHOLD) { return t.computeSequentially(); } else { Result left, right; left = compute(p.leftHalf()); right = compute(p.rightHalf()); return combine(left, right); } } 33 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Result compute(Task t) { if (t.size() < SEQUENTIAL_THRESHOLD) { return t.computeSequentially(); } else { Result left, right; INVOKE-IN-PARALLEL { left = compute(p.leftHalf()); right = compute(p.rightHalf()); } return combine(left, right); } } 33 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 34 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • public class Task extends java.util.concurrent.RecursiveAction { List<Student> students; static final int SEQUENTIAL_THRESHOLD = 1 << 14; Task(List<Student> ss) { double result; students = ss; } protected void compute() { if (students.size() < SEQUENTIAL_THRESHOLD) { Task leftHalf() { result = computeSequentially(); int n = students.size(); } else { return new Task(students.subList(0, n / 2)); Task left = leftHalf(); } Task right = rightHalf(); invokeAll(left, right); // INVOKE-IN-PARALLEL Task rightHalf() { result = Math.max(left.result, right.result); int n = students.size(); } return new Task(students.subList(n / 2, n)); } } static double compute(List<Student> ss) { double computeSequentially() { ForkJoinPool pool = new ForkJoinPool(); double max = Double.MIN_VALUE; Task t = new Task(ss); for (Student s : students) { pool.invoke(t); if (s.gradYear == 2011) return t.result; max = Math.max(max, s.score); } } return max; } } 34 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework 35 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework NIO.2 (JSR 203) 35 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • New Filesystem API File notifications Directory operations Asynchronous I/O New filesystem provider for zip/jar archives 36 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • import java.nio.file.*; 37 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • import java.nio.file.*; Path searchDir = Paths.get("c:/Users"); final Path findFile = Paths.get("baby.jpg"); 37 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • import java.nio.file.*; Path searchDir = Paths.get("c:/Users"); final Path findFile = Paths.get("baby.jpg"); FileVisitor visitor = new SimpleFileVisitor() { public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { if (file.getName().startsWith(findFile)) { System.out.format("%s%n", findFile); } return FileVisitResult.CONTINUE; } }; 37 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • import java.nio.file.*; Path searchDir = Paths.get("c:/Users"); final Path findFile = Paths.get("baby.jpg"); FileVisitor visitor = new SimpleFileVisitor() { public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { if (file.getName().startsWith(findFile)) { System.out.format("%s%n", findFile); } return FileVisitResult.CONTINUE; } }; EnumSet<FileVisitOption> opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS); 37 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • import java.nio.file.*; Path searchDir = Paths.get("c:/Users"); final Path findFile = Paths.get("baby.jpg"); FileVisitor visitor = new SimpleFileVisitor() { public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { if (file.getName().startsWith(findFile)) { System.out.format("%s%n", findFile); } return FileVisitResult.CONTINUE; } }; EnumSet<FileVisitOption> opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS); Files.walkFileTree(searchDir, opts, Integer.MAX_VALUE, visitor); 37 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • import java.nio.file.*; Path searchDir = Paths.get("c:/Users"); final Path findFile = Paths.get("baby.jpg"); FileVisitor visitor = new SimpleFileVisitor() { public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { if (file.getName().startsWith(findFile)) { System.out.format("%s%n", findFile); } return FileVisitResult.CONTINUE; } }; EnumSet<FileVisitOption> opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS); Files.walkFileTree(searchDir, opts, Integer.MAX_VALUE, visitor); 37 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework Strict class-file checking · Upgrade the class-loader architecture · Method to close a URLClassLoader · Concurrency and collections updates · Unicode 6.0 · Locale enhancement · Separate user and user-interface locales · More new I/O APIs (JSR 203) · Filesystem provider for zip/jar archives · SCTP · SDP · Windows Vista IPv6 stack · TLS 1.2 · Elliptic-curve cryptography (ECC) · JDBC 4.1 · XRender pipeline for Java 2D · New platform APIs for 6u10 graphics features · Nimbus look-and-feel for Swing · Swing JLayer component · Gervill sound synthesizer · Update the XML stack · Enhanced MBeans 38 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 7 Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework NIO.2 (JSR 203) Strict class-file checking · Upgrade the class-loader architecture · Method to close a URLClassLoader · Concurrency and collections updates · Unicode 6.0 · Locale enhancement · Separate user and user-interface locales · More new I/O APIs (JSR 203) · Filesystem provider for zip/jar archives · SCTP · SDP · Windows Vista IPv6 stack · TLS 1.2 · Elliptic-curve cryptography (ECC) · JDBC 4.1 · XRender pipeline for Java 2D · New platform APIs for 6u10 graphics features · Nimbus look-and-feel for Swing · Swing JLayer component · Gervill sound synthesizer · Update the XML stack · Enhanced MBeans 38 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • JVM Convergence Copyright © 2010 Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • JVM Convergence Copyright © 2010 Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 40 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 Project Lambda (JSR 335) 40 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 Project Lambda (JSR 335) Project Jigsaw (JSR TBD) 40 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 41 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 41 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • C# 41 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 41 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 42 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • class Student { String name; int gradYear; double score; } 42 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • class Student { String name; int gradYear; double score; } List<Student> students = ...; 42 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • class Student { String name; int gradYear; double score; } List<Student> students = ...; double max = Double.MIN_VALUE; for (Student s : students) { if (s.gradYear == 2011) max = Math.max(max, s.score); } return max; 42 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • List<Student> students = ...; public class Task extends java.util.concurrent.RecursiveAction { List<Student> students; static final int SEQUENTIAL_THRESHOLD = 1 << 14; Task(List<Student> ss) { double result; students = ss; } protected void compute() { if (students.size() < SEQUENTIAL_THRESHOLD) { Task leftHalf() { result = computeSequentially(); int n = students.size(); } else { return new Task(students.subList(0, n / 2)); Task left = leftHalf(); } Task right = rightHalf(); invokeAll(left, right); // INVOKE-IN-PARALLEL Task rightHalf() { result = Math.max(left.result, right.result); int n = students.size(); } return new Task(students.subList(n / 2, n)); } } static double compute(List<Student> ss) { double computeSequentially() { ForkJoinPool pool = new ForkJoinPool(); double max = Double.MIN_VALUE; Task t = new Task(ss); for (Student s : students) { pool.invoke(t); if (s.gradYear == 2011) return t.result; max = Math.max(max, s.score); } } return max; } } 42 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • class Student { String name; int gradYear; double score; } List<Student> students = ...; double max = Double.MIN_VALUE; for (Student s : students) { if (s.gradYear == 2011) max = Math.max(max, s.score); } return max; 42 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • class Student { String name; int gradYear; double score; } List<Student> students = ...; double max = Double.MIN_VALUE; for (Student s : students) { if (s.gradYear == 2011) max = Math.max(max, s.score); } return max; 43 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • class Student { String name; int gradYear; double score; } List<Student> students = ...; double max = Double.MIN_VALUE; for (Student s : students) { if (s.gradYear == 2011) max = Math.max(max, s.score); } return max; 43 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • class Student { String name; int gradYear; double score; } List<Student> students = ...; double max = Double.MIN_VALUE; for (Student s : students) { if (s.gradYear == 2011) max = Math.max(max, s.score); } return max; 43 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students s.gradYear == 2011 s.score Math.max 44 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter s.gradYear == 2011 s.score Math.max 44 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter s.gradYear == 2011 .map s.score Math.max 44 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter s.gradYear == 2011 .map s.score .reduce Math.max 44 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter s.gradYear == 2011 .map s.score .reduce Math.max 45 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(new Predicate<Student>() { public boolean eval(Student s) { return s.gradYear == 2011; } }).map s.score .reduce Math.max 45 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(new Predicate<Student>() { public boolean eval(Student s) { return s.gradYear == 2011; } }).map s.score .reduce Math.max 46 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(new Predicate<Student>() { public boolean eval(Student s) { return s.gradYear == 2011; } }).map(new Mapper<Student,Double>() { public Double map(Student s) { return s.score; } }).reduce Math.max 46 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(new Predicate<Student>() { public boolean eval(Student s) { return s.gradYear == 2011; } }).map(new Mapper<Student,Double>() { public Double map(Student s) { return s.score; } }).reduce Math.max 47 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(new Predicate<Student>() { public boolean eval(Student s) { return s.gradYear == 2011; } }).map(new Mapper<Student,Double>() { public Double map(Student s) { return s.score; } }).reduce(0.0, new Reducer<Double,Double>() { public Double reduce(Double max, Double score) { return Math.max(max, score); } }); 47 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter( (Student s) s.gradYear == 2011 ).map(new Mapper<Student,Double>() { public Double map(Student s) { return s.score; } }).reduce(0.0, new Reducer<Double,Double>() { public Double reduce(Double max, Double score) { return Math.max(max, score); } }); 47 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter((Student s) s.gradYear == 2011) .map(new Mapper<Student,Double>() { public Double map(Student s) { return s.score; } }).reduce(0.0, new Reducer<Double,Double>() { public Double reduce(Double max, Double score) { return Math.max(max, score); } }); 48 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter((Student s) -> s.gradYear == 2011) .map(new Mapper<Student,Double>() { public Double map(Student s) { return s.score; } }).reduce(0.0, new Reducer<Double,Double>() { public Double reduce(Double max, Double score) { return Math.max(max, score); } }); 48 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter((Student s) -> s.gradYear == 2011) .map( (Student s) s.score ).reduce(0.0, new Reducer<Double,Double>() { public Double reduce(Double max, Double score) { return Math.max(max, score); } }); 48 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter((Student s) -> s.gradYear == 2011) .map((Student s) s.score) .reduce(0.0, new Reducer<Double,Double>() { public Double reduce(Double max, Double score) { return Math.max(max, score); } }); 49 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter((Student s) -> s.gradYear == 2011) .map((Student s) -> s.score) .reduce(0.0, new Reducer<Double,Double>() { public Double reduce(Double max, Double score) { return Math.max(max, score); } }); 49 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter((Student s) -> s.gradYear == 2011) .map((Student s) -> s.score) .reduce(0.0, (Double max, Double score) Math.max(max, score) ); 49 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter((Student s) -> s.gradYear == 2011) .map((Student s) -> s.score) .reduce(0.0, (Double max, Double score) Math.max(max, score)); 50 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter((Student s) -> s.gradYear == 2011) .map((Student s) -> s.score) .reduce(0.0, (Double max, Double score) -> Math.max(max, score)); 50 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter( s -> s.gradYear == 2011) .map( s -> s.score) .reduce(0.0, ( max, score) -> Math.max(max, score)); 50 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(s -> s.gradYear == 2011) .map(s -> s.score) .reduce(0.0, (max, score) -> Math.max(max, score)); 51 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(s -> s.gradYear == 2011) .map(s -> s.score) .reduce(0.0, Math.max ); 51 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(s -> s.gradYear == 2011) .map(s -> s.score) .reduce(0.0, Math.max); 52 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(s -> s.gradYear == 2011) .map(s -> s.score) .reduce(0.0, Math#max); 52 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(s ->Predicate<Student>() { students.filter(new s.gradYear == 2011) public booleans.score) .map(s -> eval(Student s) { return s.gradYear == 2011; .reduce(0.0, Math#max); } }).map(new Mapper<Student,Double>() { public Double map(Student s) { return s.score; } }).reduce(0.0, new Reducer<Double,Double>() { public Double reduce(Double max, Double score) { return Math.max(max, score); } }); 52 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(s -> s.gradYear == 2011) .map(s -> s.score) .reduce(0.0, Math#max); 52 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(s -> s.gradYear == 2011) // Iterable .map(s -> s.score) .reduce(0.0, Math#max); 52 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(s -> s.gradYear == 2011) // Iterable .map(s -> s.score) // Iterable .reduce(0.0, Math#max); 52 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.filter(s -> s.gradYear == 2011) // Iterable .map(s -> s.score) // Iterable .reduce(0.0, Math#max); // Double 52 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students .filter(s -> s.gradYear == 2011) // Iterable .map(s -> s.score) // Iterable .reduce(0.0, Math#max); // Double 53 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • double max = students.parallel() .filter(s -> s.gradYear == 2011) // Iterable .map(s -> s.score) // Iterable .reduce(0.0, Math#max); // Double 53 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • List<Student> students = ...; double max = students.parallel() .filter(s -> s.gradYear == 2011) .map(s -> s.score) .reduce(0.0, Math#max); 54 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 55 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • interface Iterable<T> { Iterator<T> iterator(); } 55 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • interface Iterable<T> { Iterator<T> iterator(); } 56 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • interface Iterable<T> { Iterator<T> iterator(); Iterable<T> filter(Predicate<? super T> predicate); <U> Iterable<U> map(Mapper<? super T, ? extends U> mapper); <U> U reduce(U base, Reducer<U, ? super T> reducer); } 56 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • interface Iterable<T> { Iterator<T> iterator(); Iterable<T> filter(Predicate<? super T> predicate) <U> Iterable<U> map(Mapper<? super T, ? extends U> mapper); <U> U reduce(U base, Reducer<U, ? super T> reducer); } 57 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • interface Iterable<T> { Iterator<T> iterator(); Iterable<T> filter(Predicate<? super T> predicate) default Iterables.filter; <U> Iterable<U> map(Mapper<? super T, ? extends U> mapper); <U> U reduce(U base, Reducer<U, ? super T> reducer); } 57 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • interface Iterable<T> { Iterator<T> iterator(); Iterable<T> filter(Predicate<? super T> predicate) default Iterables.filter; <U> Iterable<U> map(Mapper<? super T, ? extends U> mapper) <U> U reduce(U base, Reducer<U, ? super T> reducer); } 58 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • interface Iterable<T> { Iterator<T> iterator(); Iterable<T> filter(Predicate<? super T> predicate) default Iterables.filter; <U> Iterable<U> map(Mapper<? super T, ? extends U> mapper) default Iterables.map; <U> U reduce(U base, Reducer<U, ? super T> reducer); } 58 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • interface Iterable<T> { Iterator<T> iterator(); Iterable<T> filter(Predicate<? super T> predicate) default Iterables.filter; <U> Iterable<U> map(Mapper<? super T, ? extends U> mapper) default Iterables.map; <U> U reduce(U base, Reducer<U, ? super T> reducer) } 59 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • interface Iterable<T> { Iterator<T> iterator(); Iterable<T> filter(Predicate<? super T> predicate) default Iterables.filter; <U> Iterable<U> map(Mapper<? super T, ? extends U> mapper) default Iterables.map; <U> U reduce(U base, Reducer<U, ? super T> reducer) default Iterables.reduce; } 59 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Project Lambda = Lambda expressions + Bulk-data operations + Method literals + Default methods 60 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 61 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 61 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 61 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 Project Lambda (JSR 335) Project Jigsaw (JSR TBD) 62 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 63 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • http://www.flickr.com/photos/lizadaly/2944362379 63 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 64 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • $ java -cp $APPHOME/lib/jdom-1.0.jar :$APPHOME/lib/jaxen-1.0.jar :$APPHOME/lib/saxpath-1.0.jar :$APPHOME/lib/rome-1.0.jar :$APPHOME/lib/rome-fetcher-1.0.jar :$APPHOME/lib/joda-time-1.6.jar :$APPHOME/lib/tagsoup-1.2.jar org.planetjdk.aggregator.Main 64 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // module-info.java module org.planetjdk.aggregator @ 1.0 { requires jdom @ 1.0; requires tagsoup @ 1.2; requires rome @ 1.0; requires rome-fetcher @ 1.0; requires joda-time @ 1.6; requires jaxp @ 1.4.4; class org.openjdk.aggregator.Main; } 64 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 65 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • org.planetjdk.aggregator joda-time jdom rome-fetcher rome jaxp tagsoup 65 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • org.planetjdk.aggregator joda-time jdom rome-fetcher rome jaxp tagsoup 65 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • org.planetjdk.aggregator joda-time jdom rome-fetcher rome jaxp tagsoup 65 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • org.planetjdk.aggregator joda-time jdom rome-fetcher jaxen rome jaxp tagsoup 65 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • org.planetjdk.aggregator joda-time jdom rome-fetcher jaxen rome saxpath jaxp tagsoup 65 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • // module-info.java module org.planetjdk.aggregator @ 1.0 { requires jdom @ 1.0; requires tagsoup @ 1.2; requires rome @ 1.0; requires rome-fetcher @ 1.0; requires joda-time @ 1.6; requires jaxp @ 1.4.4; class org.openjdk.aggregator.Main; } 66 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jar // module-info.java module org.planetjdk.aggregator @ 1.0 { requires jdom @ 1.0; requires tagsoup @ 1.2; requires rome @ 1.0; requires rome-fetcher @ 1.0; requires joda-time @ 1.6; requires jaxp @ 1.4.4; class org.openjdk.aggregator.Main; } 66 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jar // module-info.java jmod module org.planetjdk.aggregator @ 1.0 { requires jdom @ 1.0; requires tagsoup @ 1.2; requires rome @ 1.0; requires rome-fetcher @ 1.0; requires joda-time @ 1.6; requires jaxp @ 1.4.4; class org.openjdk.aggregator.Main; } 66 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jar // module-info.java jmod module org.planetjdk.aggregator @ 1.0 { requires jdom @ 1.0; requires tagsoup @ 1.2; rpm requires rome @ 1.0; requires rome-fetcher @ 1.0; requires joda-time @ 1.6; requires jaxp @ 1.4.4; class org.openjdk.aggregator.Main; } 66 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jar // module-info.java jmod module org.planetjdk.aggregator @ 1.0 { requires jdom @ 1.0; requires tagsoup @ 1.2; rpm requires rome @ 1.0; requires rome-fetcher @ 1.0; requires joda-time @ 1.6; requires jaxp @ 1.4.4; class org.openjdk.aggregator.Main; } deb 66 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jar // module-info.java jmod module org.planetjdk.aggregator @ 1.0 { requires jdom @ 1.0; mvn requires tagsoup @ 1.2; rpm requires rome @ 1.0; requires rome-fetcher @ 1.0; requires joda-time @ 1.6; requires jaxp @ 1.4.4; class org.openjdk.aggregator.Main; } deb 66 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • http://www.flickr.com/photos/viagallery/2290654438 67 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • http://www.flickr.com/photos/viagallery/2290654438 67 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 67 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 68 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 69 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 70 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 71 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 72 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth javafx ssl logging base 72 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 72 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 73 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 74 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 75 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 76 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 77 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 78 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • jre jdk java deploy tools jre-tools headless jaxws-tools javap xml-dsig jaxws javah corba jdbc desktop javadoc scripting txn kerberos management jaxp javac naming compiler rmi auth ssl logging base 79 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 80 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 80 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 81 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 80/ 81 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011 20
    • 8 Project Lambda (JSR 335) Project Jigsaw (JSR TBD) 82 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 Project Lambda (JSR 335) Project Jigsaw (JSR TBD) 83 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 Project Lambda (JSR 335) Project Jigsaw (JSR TBD) JavaScript (Project Nashorn) 83 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 Project Lambda (JSR 335) Project Jigsaw (JSR TBD) JavaScript (Project Nashorn) JVM Convergence 83 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 Project Lambda (JSR 335) Project Jigsaw (JSR TBD) JavaScript (Project Nashorn) JVM Convergence Type Annotations (JSR 308) 83 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 Project Lambda (JSR 335) Project Jigsaw (JSR TBD) JavaScript (Project Nashorn) JVM Convergence Type Annotations (JSR 308) Date/Time API (JSR 310) 83 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 Project Lambda (JSR 335) Project Jigsaw (JSR TBD) JavaScript (Project Nashorn) JVM Convergence Type Annotations (JSR 308) Date/Time API (JSR 310) Sensors 83 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 8 Project Lambda (JSR 335) Project Jigsaw (JSR TBD) JavaScript (Project Nashorn) JVM Convergence Type Annotations (JSR 308) Date/Time API (JSR 310) Sensors Plus more to come … 83 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • JDK Roadmap JDK 7u6 •OS X JRE Port (for NetBeans 7 end-users) NetBeans.next •Java SE 7 Support JDK 7u2 •Improved OS •Java SE 8 Support Last Public integration, auto- •more JDK 7 •JRE 7 on java.com JDK 6 Update update •JavaFX 3.0 Support •JavaFX 2.0 co-install •more 2011 2012 2013 2014 Mac OS X JDK 7u4 JDK 8 •JDK 7 Developer Preview •OS X JDK Port (for •Windows, Linux, Solaris, OS X, developers) Embedded Platforms •Java FX 2.0 Dev Preview •Jigsaw •Lambda •JavaFX 3.0 NetBeans 7.1 •Complete Oracle JVM •JavaFX 2.0 Support Convergence •JavaScript Interop •more 84 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 85 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 85 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 85 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • 85 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • openjdk.java.net/projects/jdk8 jdk8.java.net 86 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Thursday, December 15, 2011
    • Thursday, December 15, 2011
    • | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved. | Insert Information Protection Policy Classification from Slide 8Thursday, December 15, 2011