Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
The Java SE Platform: Rebuilding Momentum Roger Brinkley Java Developer Advocate, Java Platform Group Java Spotlight Podcast Host | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved. | Insert Information Protection Policy Classification from Slide 8 Joe Darcy Bruno Souza Stuart Marks Adam Bein Alex Buckley Adam Messinger Jim Laskey Mark Reinhold Alan Bateman Cameron Purdy 2 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. http::/javaspotlight.org @javaspotlight Mike Duigou The proceeding 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 3 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Grow developer base Grow adoption Increase competitiveness Adapt to change 4 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 5 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Mid 2011 2012 Project Framework Strict Project Project Lambda Jigsaw TypeVerification Annotations (JSR 308) (JSR 335) Lambda Parallel Class Unicode 6.0 JDBC 4.1 LoadersBulk-Data Phase Operations rs Transfer Queues More New I/O (JSR 203) 6 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Enhanced Locales SDP & SCTP TLS 1.2 EC C XRender Pipeline Swing JLayer Swing Nimbus JDK 7 Schedule 2010/12/16 Feature Complete 2011/04/12Rampdown start: P1-P3 bugs only 2011/04/28API/interface changes: Showstoppers on 2011/05/11All targeted bugs addressed First releas 2011/05/18Bug fixes: Showstoppers only 2011/06/08Final test cycle starts 2011/07/28General Availability 7 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Four JSRs 1,966 Enhancements 9,494 Bug Fixes 9,018 Mercurial Changesets 147 Builds Four years, seven months, 2011/7/28 and seventeen days … 8 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework (JSR 166y) NIO.2 (JSR 203) 10 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. http://www.flickr.com/photos/chefranden/908539119/ 11 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. // Diamond foo() Map<String,String> <String,Map<Integer,List<String>>> <String,Map<Integer,String>> map ; { return = new HashMap<>(); HashMap<String,String> <String,Map<Integer,String>> <String,Map<Integer,List<String>>> <> (); }// ... map = 12 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. // Strings in switch if (s.equals("foo")) switch (s) { doFoo(); case : break; else if (s.equals( "bar")) case : break; doBar(); case : break; else if (s.equals( "baz")) default: doBaz(); else } throw new IllegalArgumentException(s); 13 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. // Multi-catch try { // ... } catch (IOException | x) { logger.log(SEVERE, "Unexpected failure", x); throw x; } catch (SQLException x) { logger.log(SEVERE, "Unexpected failure", x); throw x; } 14 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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. 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(); } } 16 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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(); } } 17 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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(); } } = = 18 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. { // 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); } } try ( ) { } 19 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. // Try-with-resources package foo; java.lang; class FooResource public interface AutoCloseable { implements public void AutoCloseable{ close() throws IOException; } // ... public void close() { // ... } } 20 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 21 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 22 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 23 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework NIO.2 (JSR 203) 26 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Bex Script CAL Zigzag Luck foo Scal Rexx a JudoScrip t Drools vlanguage Lis p BeanShel l G JavaScript Tiger Icon Processin g Tcl E Smallta Log JHCR Yoixlk o WebL Simkin Eiffel JESS Correlat ObjectScrip e Anvil Jickle t Clojur e 27 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Forth C# FScrip t Funnel JRub Pascal Sather y Ada Mini Tea Dawn Schem TermWare Jython e iScript LLP Obero SALSA Basic n PHP Groov Piccola Proloy g Modula Sleep -2 Hojo Yassl Phobo PLAN s Pnuts Nice Presen t Ruby = Method Calls Lots and lots and lots of ’em … 28 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 29 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. JRuby onJRuby Java 7on with InvokeDynamic Java 5/6 def foo bar end def bar baz end def baz # ... end 30 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. foo JRuby call logic bar baz bar JRuby call logic baz Kills many JVM optimizations Straight-through dispatch Optimizations (like inlining) canpaths happen! InvokeDynamic (JSR 292)openjdk.java.net/projects/mlvm 31 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework NIO.2 (JSR 203) 33 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 34 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 1. Keep all the processor cores busy 2. Minimize synchronization overhead 3. Scale linearly as the number of core increases 35 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 36 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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); } } 37 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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); } } 38 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. public class Task extends java.util.concurrent.RecursiveAction { List<Student> students; static final int SEQUENTIAL_THRESHOLD = 1 << 14; Task(List<Student> ss) { students = ss; } double result; protected void compute() { if (students.size() < SEQUENTIAL_THRESHOLD) { result = computeSequentially(); } else { Task left = leftHalf(); Task right = rightHalf(); invokeAll(left, right); // INVOKE-IN-PARALLEL result = Math.max(left.result, right.result); } } Task leftHalf() { int n = students.size(); return new Task(students.subList(0, n / 2)); } Task rightHalf() { int n = students.size(); return new Task(students.subList(n / 2, n)); } double computeSequentially() { double max = Double.MIN_VALUE; for (Student s : students) { if (s.gradYear == 2011) max = Math.max(max, s.score); } return max; } 39 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. static double compute(List<Student> ss) { ForkJoinPool pool = new ForkJoinPool(); Task t = new Task(ss); pool.invoke(t); return t.result; } } Fork/Join Frameworkgee.cs.oswego.edu/dl/papers/fj.pdf 40 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Coin (JSR 334) InvokeDynamic (JSR 292) Fork/Join Framework NIO.2 (JSR 203) 41 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. New File system API File notifications Directory operations Asynchronous I/O New file system provider for zip/jar archives 42 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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); 43 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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 44 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. JVM Convergence Copyright © 2010 Oracle and/or its affiliates. All rights reserved. Project Lambda (JSR 335) Project Jigsaw (JSR TBD) 46 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 47 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. public class Task extends java.util.concurrent.RecursiveAction { class Student { String name; int List<Student> students; gradYear; double Task(List<Student> ss) { score;} students = ss; } Task leftHalf() { int n = students.size(); return new Task(students.subList(0, n / 2)); } List<Student> students = ...; Task rightHalf() { int n = students.size(); return new Task(students.subList(n / 2, n)); } double computeSequentially() { double max = Double.MIN_VALUE; for (Student s : students) { if (s.gradYear == 2011) max = Math.max(max, s.score); } return max; } static final int SEQUENTIAL_THRESHOLD = 1 << 14; double result; protected void compute() { if (students.size() < SEQUENTIAL_THRESHOLD) { result = computeSequentially(); } else { Task left = leftHalf(); Task right = rightHalf(); invokeAll(left, right); // INVOKE-IN-PARALLEL result = Math.max(left.result, right.result); } } double max = Double.MIN_VALUE; for (Student s : students) { static double compute(List<Student> ss) { if (s.gradYear == 2011) ForkJoinPool pool = new ForkJoinPool(); Task t = new Task(ss); max = Math.max(max, s.score); pool.invoke(t); return t.result; } } return max; } 48 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. class Student { String name; int gradYear; double score;} List<Student> students = ...; double max = Double.MIN_VALUE; for (Student s : students students) { if ( s.gradYear == 2011 ) max = Math.max(max, s.score); s.score } return max; 49 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. double max = students.filter s.gradYear == 2011 .map s.score .reduce Math.max 50 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. double max = students.filter(new Predicate<Student>() { public boolean eval(Student s) { return s.gradYear == 2011 ; } }).map s.score .reduce Math.max 51 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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 52 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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); } }); 53 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. -> 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); } }); 54 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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); } }); 55 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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)); 56 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. double max = students.filter(s -> s.gradYear == 2011 ) .map(s -> s.score) .reduce(0.0, (max, score) -> Math.max(max, score)); 57 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. double max double max = studennew = students .filter( s ->Predicate<Student>() s.gradYear == 2011 ) { // .map( s -> s.score ) // public boolean eval(Student s) { .reduce( 0.0, Math#max Math.max ); // 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 return Math.max(max, score); } }); 58 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Iterable Iterable Double { score) { double max = students.parallel() .filter(s -> s.gradYear == 2011 ) // Iterable .map(s -> s.score) // Iterable .reduce(0.0, Math#max); // Double 59 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. List<Student> students = ...; double max = students.parallel() .filter(s -> s.gradYear == 2011 ) .map(s -> s.score) .reduce(0.0, Math#max); 60 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. interface Iterable<T> { } 61 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Iterator<T> iterator(); 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) ; } 62 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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) ; } 63 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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) ; } 64 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 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; } 65 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Lambda = Lambda expressions + Bulk-data operations + Method literals + Default methods 66 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 67 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Lambda (JSR 335)openjdk.java.net/projects/lambda 68 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Lambda (JSR 335) Project Jigsaw (JSR TBD) 69 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 70 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. http://www.flickr.com/photos/lizadaly/29443 62379 // module-info.java $ java -cp $APPHOME/lib/jdom-1.0.jar\ module org.planetjdk.aggregator @ 1.0 { :$APPHOME/lib/jaxen-1.0.jar\ requires jdom @ 1.0; :$APPHOME/lib/saxpath-1.0.jar\ requires tagsoup @ 1.2; :$APPHOME/lib/rome-1.0.jar\ requires rome @ 1.0; :$APPHOME/lib/rome-fetcher-1.0.jar\ requires rome-fetcher @ 1.0; :$APPHOME/lib/joda-time-1.6.jar\ requires joda-time @ 1.6; :$APPHOME/lib/tagsoup-1.2.jar\ requires jaxp @ 1.4.4; org.planetjdk.aggregator.Main class org.openjdk.aggregator.Main; } 71 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. org.planetjdk.aggre gator jdo m jaxe n saxpat h 72 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. tagsou p joda-time romefetcher rom e jaxp mvn 73 // module-info.java jar 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; } jmod | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. rpm deb http://www.flickr.com/photos/viagallery/229 0654438 74 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 75 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 76 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 77 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 78 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl javafx logging base 79 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 80 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 81 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 82 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 83 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 84 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 85 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. jdk jre java headless corba scripting txn jdbc xml-dsig kerberos deploy tools jre-tools jaxws-tools jaxws management javap desktop javah javadoc jaxp javac naming rmi compiler auth ssl logging base 86 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 87 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 88 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Jigsaw openjdk.java.net/projects/jigsaw 89 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Lambda (JSR 335) Project Jigsaw (JSR TBD) 90 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Project Lambda (JSR 335) Project Jigsaw (JSR 91 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. TBD) JavaScript (Project Nashorn) JVM Convergence Type Annotations (JSR 308) Date/Time API (JSR 310) Sensors Plus more to come … Self-Tuning JVM Improved Native Integration Big Data Reificatio n Tail Calls/Continuations Meta-Object Protocol Multi-Tenancy Resource Management Heterogeneous Compute Models 92 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. JDK Roadmap NetBeans 7 •Java SE 7 Support •more JDK 7u2 •JRE 7 on java.com •JavaFX 2.0 co-install JDK 7 2011 JDK 7u6 Last Public JDK 6 Update NetBeans.next •Java SE 8 Support •JavaFX 3.0 Support •more 2013 2012 2014 Mac OS X JDK 7u4 JDK 8 •JDK 7 Developer Preview •OS X JDK Port (for developers) •Windows, Linux, Solaris, OS X, Embedded Platforms •Jigsaw •Lambda •JavaFX 3.0 •Complete Oracle JVM Convergence •JavaScript Interop •more •Java FX 2.0 Dev Preview NetBeans 7.1 •JavaFX 2.0 Support 93 •OS X JRE Port (for end-users) •Improved OS integration, autoupdate | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. 94 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. openjdk.java.net/projects/jdk8 jdk8.java.net 95 | Copyright © 2011, Oracle and/or its affiliates. All rights reserved. | Copyright © 2011, Oracle and/or it’s affiliates. All rights reserved. | Insert Information Protection Policy Classification from Slide 8