Your SlideShare is downloading. ×
0
What‟s New()                  What‟s Next()©Copyright 2011
Now() 11:1111/11/11
DisclaimerI am just an ordinary developerI don‟t work for Oracle
Mattias Karlsson              Avega GroupTwitter: @matkarwww.Linkedin/in/mattiask
JavaforumJavaforum www.jforum.se
Biggest news?
Java 7 is GA
HistoryJDK/YEAR                CommentFeb 1997                Retooling of the AWT event model, innerJDK 1.1              ...
Java SE 7Started in Aug 2006
Why was 7 delayed•   Open Sourcing JDK•   Conflicts Blocking JCP•   Sun Finance•   JavaFX•   Oracle Deal
Trouble in paradise•   James Gosling leaving Oracle•   Oracle vs Google•   Apache leaving JCP•   Doug Lea, Bob Lee leaving...
Java 7                        Plan A,           JDK 7                        Late 2012”It„s been clear for some time that ...
Plan B (Mark R)8 Sep 2010 ”Re-thinking JDK 7”20 Sep 2010 ”It‟s time for…Plan B”10 Oct 2010 ”Plan B: The details”
Plan B             JDK 8                 7           Late 2012Mid 2011               Late 2012
Plan B          New garbage collector G1          Library changes          Enhancements to the JVM  JDK 7   Language chang...
JSR 336 approval
Performance
G1 Garbage collector•   Still considered experimental•   Leads to much smaller pause times•   Parallelism and Concurrency•...
Using G1•    Replace CMS (Concurrent mark sweep) GC•    Enable with:-XX:+UnlockExperimentalVMOptions –XX:+UseG1GC•    GC P...
Benchmarks    •   Test 1. Add 5 Million String values (each calculated with        some complex Math arithmetic)    •   Te...
Performancehttp://geeknizer.com/java-7-whats-new-performance-benchmark-1-5-1-6-1-7/
Performance            Java 6 18% faster then Java 5            Java 7 46% faster then Java 6http://geeknizer.com/java-7-w...
Concurrency Matters Again10,0000001,000,000             Transistors  100,000   10,000    1,000                           C...
Fork/Join Java 7 concurrency     JSR 166y
JSR 166y Fork/Join•   similar to MapReduce•   useful for a certain class of problems
JSR 166y Fork/JoinResult solve(Problem problem) {        if (problem is small enough)          directly solve problem     ...
JSR 166y Fork/Join•   Create one ForkJoinPool•   Wrap code in ForkJoinTask•   Subclass RecursiveAction or RecursiveTask<E>...
class Sum extends RecursiveTask<Long> {    static final int SEQUENTIAL_THRESHOLD = 1000;    Sum(int[] arr, int lo, int hi)...
DEMOFork/Join Java 7   JSR 166y
Still too complicated?mutable state, locks and visible by default is outdatedjava.util.concurrent helps, but can only go s...
Other JVM Languages           (free to innovate)Scala/Akka• Powerful actors model• Parallel CollectionsClojure•   Immutabl...
CoinJSR 334
Project CoinA set of small language changes   should be added to JDK 7           (OpenJDK)
Strings in switchAdd the ability to switch on string valuesanalogous to the existing ability to switchon values of the pri...
Strings in switchString s = ...switch(s) { case "quux":    processQuux(s);    // fall-through case "bar":    processFooOrB...
Improved Exception              Handling•   Catching multiple exception types    •   A single catch clause can now catch  ...
Improved Exception             Handlingtry {   doWork(file);} catch (IOException|SQLException ex) {   throw ex;*}try {   d...
Underscore in numberspublic static void main(String... args) {  // THE OLD WAY  int oldBillion = 1000000000;    // THE NEW...
Automatic Resource Management •   A *resource* is as an object that used to be closed     manually     •   java.io.InputSt...
Pre Java 7public void copy(String src, String dest) throws IOEx{   InputStream in = new FileInputStream(src);   OutputStre...
Pre Java 7public void copy(String src, String dest) throws IOEx{   InputStream in = new FileInputStream(src);   try {     ...
Automatic Resource Managementpublic void copy(String src, String dest) throws IOEx{    try ( InputStream in = new FileInpu...
Improved Type Inference for     Generic Instance
Improved Type Inference for      Generic InstanceMap<String, List<String>> anagrams =  new HashMap<String, List<String>>()...
NIO.2Network and File System       JSR 203
NIO.2     Network and File System – JSR 203•   java.io.File•   java.nio.file.Path•   java.nio.file.FileSystem•   Other Use...
Pre Java 7URL url = new URL("http://www.blog.se/?page_id=1");try (  FileOutputStream fos =    new FileOutputStream(new Fil...
NIO.2        Network and File System – JSR 203URL url = new URL("http://www.blog.se/?page_id=1");try (InputStream in = url...
Da Vinci Machine Project
Da Vinci Machine Project•   Support for dynamically typed languages    •   Python, Ruby, Perl, Javascript, Groovy...•   Im...
Charles Nutter  co-leads Jruby project  Engine Yard
JSR-292invokedynamicMethod HandlesWTF?
Without invokedynamicFour existing forms of method dispatch  virtual, interface, special, superJVM decides how they workWh...
invokedynamicUser-defined dispatchName, signature as usualAdditional bootstrap method handleBootstrap called first time to...
Method HandlesSuper-awesome function pointers  Faster than reflection  Curry-able  Still talking directly to JVMUsed by in...
invokedynamic                                 bootstrap                      1st time    methodinvokedynamic   bytecode   ...
Examplepublic static void print(String s) {   System.out.println(s);}
Examplepublic static void main(java.lang.String[]);  Code:    0: ldc           #9     // String Hello, invokedynamic!    2...
Examplepublic static CallSite bootstrap(Lookup lookup,                                 String name,                       ...
JVM languages to benefit from          invokedynamic•   These gains will vary:    •   JRuby ?    •   Clojure ?•   Increasi...
Other stuff in•   TLS 1.2•   Elliptic-curve cryptography (ECC)•   JDBC 4.1•   Binary literals•   Better way to handle unsi...
Other stuff in•   New platform APIs for 6u10 graphics features•   Swing Nimbus look-and-feel•   Swing JLayer component•   ...
Runtimes
Java 7 Runtimes•   Windows x86    •   Server 2008, Server 2008 R2, 7 & 8    •   Windows Vista, XP•   Linux x86    •   Orac...
Other runtimes”The IBM SDK for Java V7 is now available forthe following platforms:” - 20 Sep 2011•   AIX•   Linux•   z/OS
http://openjdk.java.net/projects/macosx-port/
Java 7 Tool Support  NetBeans 7  Eclipse 3.7 3.8 4.1 4.2  IntelliJ 10.5
Whats.Next()
JVM Convergence          Project “HotRockit”HotSpot         HotRockit       JRockit
Plan BModularization (Jigsaw)  Language and VM Support  Platform ModularizationProject Lambda (JSR 335)  Lambda Expression...
Plan B++Project Nashorn New implementation of JavaScript Built from the ground up Leverage JVM and invoke dynamicJava FX 3...
ScheduleMay 2011: Expert Group formationSep 2011: Early Draft ReviewFeb 2012: Public ReviewMay 2012: Proposed Final DraftO...
ScheduleMay 2011: Expert Group formationSep 2011: Early Draft ReviewFeb 2012: Public ReviewMay 2012: Proposed Final DraftS...
Schedule   JDK 8, b10Developer Preview Now Available!                      JDK 8                    JSR 337jdk8.java.net
JCP.next•   Using the process to improve the process•   JSR 348    •   Transparency    •   Participation    •   Agility   ...
JCP, new members  TwitterAzul System
We‟re moving again•   The JCP Dead Lock Needed to be Broken•   OpenJDK is liberated (GPL)•   JUG attendances are growing• ...
Community
Summary•   Java 7 is GA•   Java 8 is on its way•   The JVM Rocks•   JCP.next•   The community is very much alive!
Mattias Karlsson                                            www.linkedin.com/in/mattiask                                  ...
Java 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from Oredev
Upcoming SlideShare
Loading in...5
×

Java 7 Whats New(), Whats Next() from Oredev

2,404

Published on

Finally Java SE 7 is GA and you can start using it. This talk will cover the most important new features of the language and the virtual machine. It will also cover some features that did not make it in to the SE 7 release. Finally we will discuss current state of Java as an ecosystem and my analysis and hopes for the future.

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,404
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
58
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Java 7 Whats New(), Whats Next() from Oredev"

  1. 1. What‟s New() What‟s Next()©Copyright 2011
  2. 2. Now() 11:1111/11/11
  3. 3. DisclaimerI am just an ordinary developerI don‟t work for Oracle
  4. 4. Mattias Karlsson Avega GroupTwitter: @matkarwww.Linkedin/in/mattiask
  5. 5. JavaforumJavaforum www.jforum.se
  6. 6. Biggest news?
  7. 7. Java 7 is GA
  8. 8. HistoryJDK/YEAR CommentFeb 1997 Retooling of the AWT event model, innerJDK 1.1 classes added, JavaBeans and JDBC.Dec 1998 Reflection, a Collections framework, JavaJ2SE 1.2 (Playground) Swing API Java Plug-in, JIT compiler.May 2000 HotSpot JVM, JavaSound, JNDI and JPDAJ2SE 1.3 (Kestrel)Feb 2002 RegEx, exception chaining, XML parser andJava SE 1.4 (Merlin) XSLT (JAXP), Java Web StartSep 2004 for-each loop, generics, autoboxing and var-Java SE 5 (Tiger) argsDec 2006 scripting languages with the JVM, VB langJava SE 6 (Mustang) support. Annotations (JSR 269)
  9. 9. Java SE 7Started in Aug 2006
  10. 10. Why was 7 delayed• Open Sourcing JDK• Conflicts Blocking JCP• Sun Finance• JavaFX• Oracle Deal
  11. 11. Trouble in paradise• James Gosling leaving Oracle• Oracle vs Google• Apache leaving JCP• Doug Lea, Bob Lee leaving JCP
  12. 12. Java 7 Plan A, JDK 7 Late 2012”It„s been clear for some time that themost recent JDK 7 developmentschedule is, to put it mildly, Unrealistic”(Mark Reinhold, 8 Sep 2010)
  13. 13. Plan B (Mark R)8 Sep 2010 ”Re-thinking JDK 7”20 Sep 2010 ”It‟s time for…Plan B”10 Oct 2010 ”Plan B: The details”
  14. 14. Plan B JDK 8 7 Late 2012Mid 2011 Late 2012
  15. 15. Plan B New garbage collector G1 Library changes Enhancements to the JVM JDK 7 Language changes (Coin) Concurrency and collectionsJSR 336 NIO.2
  16. 16. JSR 336 approval
  17. 17. Performance
  18. 18. G1 Garbage collector• Still considered experimental• Leads to much smaller pause times• Parallelism and Concurrency• Generational• Compaction• Predictability (over CMS)
  19. 19. Using G1• Replace CMS (Concurrent mark sweep) GC• Enable with:-XX:+UnlockExperimentalVMOptions –XX:+UseG1GC• GC Paus time goal:-XX:MaxGCPauseMillis=50 www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html
  20. 20. Benchmarks • Test 1. Add 5 Million String values (each calculated with some complex Math arithmetic) • Test 2. ArrayList <String> with 5 Million insertions (with values from Test1) • Test 3. HashMap <String, Integer> with 5 million keys, values. Each key, value pair is being calculated via concurrent thread) • Test 4. Printing 5 million items of ArrayListhttp://geeknizer.com/java-7-whats-new-performance-benchmark-1-5-1-6-1-7/
  21. 21. Performancehttp://geeknizer.com/java-7-whats-new-performance-benchmark-1-5-1-6-1-7/
  22. 22. Performance Java 6 18% faster then Java 5 Java 7 46% faster then Java 6http://geeknizer.com/java-7-whats-new-performance-benchmark-1-5-1-6-1-7/
  23. 23. Concurrency Matters Again10,0000001,000,000 Transistors 100,000 10,000 1,000 Clock (MHz) 100 10 1 1970 1980 1990 2000 2010
  24. 24. Fork/Join Java 7 concurrency JSR 166y
  25. 25. JSR 166y Fork/Join• similar to MapReduce• useful for a certain class of problems
  26. 26. JSR 166y Fork/JoinResult solve(Problem problem) { if (problem is small enough) directly solve problem else { split problem into independent parts fork new subtasks to solve each part join all subtasks compose result from subresults }}
  27. 27. JSR 166y Fork/Join• Create one ForkJoinPool• Wrap code in ForkJoinTask• Subclass RecursiveAction or RecursiveTask<E>• Need to override compute() methoddownload.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html
  28. 28. class Sum extends RecursiveTask<Long> { static final int SEQUENTIAL_THRESHOLD = 1000; Sum(int[] arr, int lo, int hi) { array = arr; low = lo; high = hi; } protected Long compute() { if(high - low <= SEQUENTIAL_THRESHOLD) { long sum = 0; for(int i=low; i < high; ++i) sum += array[i]; return sum; } else { int mid = low + (high - low) / 2; Sum left = new Sum(array, low, mid); Sum right = new Sum(array, mid, high); invokeAll(left, right); return right.join() + left.join(); } }}
  29. 29. DEMOFork/Join Java 7 JSR 166y
  30. 30. Still too complicated?mutable state, locks and visible by default is outdatedjava.util.concurrent helps, but can only go so farmove from explicit to implicit parallelism
  31. 31. Other JVM Languages (free to innovate)Scala/Akka• Powerful actors model• Parallel CollectionsClojure• Immutable by default• Thread-isolation by default• STM subsystem• Multiple concurrency models
  32. 32. CoinJSR 334
  33. 33. Project CoinA set of small language changes should be added to JDK 7 (OpenJDK)
  34. 34. Strings in switchAdd the ability to switch on string valuesanalogous to the existing ability to switchon values of the primitive types.
  35. 35. Strings in switchString s = ...switch(s) { case "quux": processQuux(s); // fall-through case "bar": processFooOrBar(s); break; case "baz": processBaz(s); default: processDefault(s); break;}
  36. 36. Improved Exception Handling• Catching multiple exception types • A single catch clause can now catch more than one exception types• Improved checking for re-thrown exceptions
  37. 37. Improved Exception Handlingtry { doWork(file);} catch (IOException|SQLException ex) { throw ex;*}try { doWork(file);} catch (final Throwable t) { throw t; // ExceptionA or ExceptionB}
  38. 38. Underscore in numberspublic static void main(String... args) { // THE OLD WAY int oldBillion = 1000000000; // THE NEW WAY int newBillion = 1_000_000_000;}
  39. 39. Automatic Resource Management • A *resource* is as an object that used to be closed manually • java.io.InputStream • OutputStream • Reader, Writer • java.sql.Connection, Statement, ResultSet • When the statement completes, whether normally or abruptly, all of its resources are closed automatically.
  40. 40. Pre Java 7public void copy(String src, String dest) throws IOEx{ InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest); try { byte[] buf = new byte[8 * 1024]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { in.close(); out.close(); }}
  41. 41. Pre Java 7public void copy(String src, String dest) throws IOEx{ InputStream in = new FileInputStream(src); try { OutputStream out = new FileOutputStream(dest); try { byte[] buf = new byte[8 * 1024]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { out.close(); } } finally { in.close(); }}
  42. 42. Automatic Resource Managementpublic void copy(String src, String dest) throws IOEx{ try ( InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest)){ byte[] buf = new byte[8 * 1024]; int n; while ((n = in.read(buf)) >= 0) out.write(buf, 0, n); } //in and out closes automagically}
  43. 43. Improved Type Inference for Generic Instance
  44. 44. Improved Type Inference for Generic InstanceMap<String, List<String>> anagrams = new HashMap<String, List<String>>();Map<String, List<String>> anagrams = new HashMap<>();
  45. 45. NIO.2Network and File System JSR 203
  46. 46. NIO.2 Network and File System – JSR 203• java.io.File• java.nio.file.Path• java.nio.file.FileSystem• Other Usefull Methods
  47. 47. Pre Java 7URL url = new URL("http://www.blog.se/?page_id=1");try ( FileOutputStream fos = new FileOutputStream(new File("output.txt")); InputStream is = url.openStream() ){ byte[] buf = new byte[4096]; int len; while ((len = is.read(buf)) > 0){ fos.write(buf, 0, len); }} catch (IOException e){ e.printStackTrace();}
  48. 48. NIO.2 Network and File System – JSR 203URL url = new URL("http://www.blog.se/?page_id=1");try (InputStream in = url.openStream()) { Files.copy(in, Paths.get("output.txt"));}catch(IOException ex){ ex.printStackTrace();}
  49. 49. Da Vinci Machine Project
  50. 50. Da Vinci Machine Project• Support for dynamically typed languages • Python, Ruby, Perl, Javascript, Groovy...• Implementations will be more efficient• JVM level support • for such languages and their implementers
  51. 51. Charles Nutter co-leads Jruby project Engine Yard
  52. 52. JSR-292invokedynamicMethod HandlesWTF?
  53. 53. Without invokedynamicFour existing forms of method dispatch virtual, interface, special, superJVM decides how they workWhat if you don‟t fit?
  54. 54. invokedynamicUser-defined dispatchName, signature as usualAdditional bootstrap method handleBootstrap called first time to wire it upJVM then optimizes like “real Java”
  55. 55. Method HandlesSuper-awesome function pointers Faster than reflection Curry-able Still talking directly to JVMUsed by invokedynamic bootstrapping
  56. 56. invokedynamic bootstrap 1st time methodinvokedynamic bytecode JVM target 2nd time method
  57. 57. Examplepublic static void print(String s) { System.out.println(s);}
  58. 58. Examplepublic static void main(java.lang.String[]); Code: 0: ldc #9 // String Hello, invokedynamic! 2: invokedynamic #18, 0 // InvokeDynamic #0:print:(Ljava/lang/String;)V 7: return invokedynamic bootstrap name and bytecode handle signature
  59. 59. Examplepublic static CallSite bootstrap(Lookup lookup, String name, MethodType signature{ MethodHandle handle = lookup.findStatic(this_class, name, signature); CallSite site = new ConstantCallSite(handle); return site;}
  60. 60. JVM languages to benefit from invokedynamic• These gains will vary: • JRuby ? • Clojure ?• Increasing its performance• Big potential wins
  61. 61. Other stuff in• TLS 1.2• Elliptic-curve cryptography (ECC)• JDBC 4.1• Binary literals• Better way to handle unsigned literals• Unicode 6.0• Locale enhancement• Support for IETF BCP 47 and UTR 35
  62. 62. Other stuff in• New platform APIs for 6u10 graphics features• Swing Nimbus look-and-feel• Swing JLayer component• Updated XML stack
  63. 63. Runtimes
  64. 64. Java 7 Runtimes• Windows x86 • Server 2008, Server 2008 R2, 7 & 8 • Windows Vista, XP• Linux x86 • Oracle Linux 5.5+, 6.x • Red Hat Enterprise Linux 5.5+, 6.x • SuSE Linux Enterprise Server 10.x, 11.x • Ubuntu Linux 10.04 LTS, 11.04• Solaris x86/SPARC • Solaris 10.9+, 11.x
  65. 65. Other runtimes”The IBM SDK for Java V7 is now available forthe following platforms:” - 20 Sep 2011• AIX• Linux• z/OS
  66. 66. http://openjdk.java.net/projects/macosx-port/
  67. 67. Java 7 Tool Support NetBeans 7 Eclipse 3.7 3.8 4.1 4.2 IntelliJ 10.5
  68. 68. Whats.Next()
  69. 69. JVM Convergence Project “HotRockit”HotSpot HotRockit JRockit
  70. 70. Plan BModularization (Jigsaw) Language and VM Support Platform ModularizationProject Lambda (JSR 335) Lambda Expressions for JavaType Annotations (JSR 308) JDK 8Project Coin part IIDate and Time API (JSR 310) JSR 337
  71. 71. Plan B++Project Nashorn New implementation of JavaScript Built from the ground up Leverage JVM and invoke dynamicJava FX 3.0 Open Sourced Bundled with Java 8 JDK 8 JSR 337
  72. 72. ScheduleMay 2011: Expert Group formationSep 2011: Early Draft ReviewFeb 2012: Public ReviewMay 2012: Proposed Final DraftOct 2012: Final Release JDK 8 JSR 337
  73. 73. ScheduleMay 2011: Expert Group formationSep 2011: Early Draft ReviewFeb 2012: Public ReviewMay 2012: Proposed Final DraftSummer 2013: Final Release JDK 8 JSR 337
  74. 74. Schedule JDK 8, b10Developer Preview Now Available! JDK 8 JSR 337jdk8.java.net
  75. 75. JCP.next• Using the process to improve the process• JSR 348 • Transparency • Participation • Agility • Governance• A second JSR will be filed soon • JavaSE and JavaME EC - merged
  76. 76. JCP, new members TwitterAzul System
  77. 77. We‟re moving again• The JCP Dead Lock Needed to be Broken• OpenJDK is liberated (GPL)• JUG attendances are growing• Oracle marketing estimates 9-10 million devs• Dozens of new JVM languages• A Vibrant Java Ecosystem
  78. 78. Community
  79. 79. Summary• Java 7 is GA• Java 8 is on its way• The JVM Rocks• JCP.next• The community is very much alive!
  80. 80. Mattias Karlsson www.linkedin.com/in/mattiask twitter: @matkar mattias.karlsson@avegagroup.s e Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names appearing on the slides may be trademarks of their respective owners. The development, release, and timing of any features or functionality described for Oracle„s products remains at the sole discretion of Oracle and JCP©Copyright 2011
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×