Java 7 News Tobias Israel | [email protected] Donnerstag, 15. Dezember 11 Was bisher geschah: Donnerstag, 15. Dezember 11 7. Juli 2011 Bangalore Beijing Cairo Canberra Dallas Dakar Düsseldorf Donnerstag, 15. Dezember 11 Redwood Shores London São Paulo Shanghai Stuttgart Tokyo Jakarta Mexiko City New York City Okinawa Quebec Rio de Janeiro Santiago 5 Monate später ... Donnerstag, 15. Dezember 11 hello Java 7 @JUG Saxony Dresden Donnerstag, 15. Dezember 11 Was bringt der Sommer 2013? Donnerstag, 15. Dezember 11 Java 8 Donnerstag, 15. Dezember 11 Jetzt aber zurück zu Java 7! Donnerstag, 15. Dezember 11 JSR 336: Java SE 7 • JSR 292: Support for dynamically-typed languages • Strict class-file checking • JSR 334: Small language enhancements • Upgrade class-loader architecture • Method to close a URLClassLoader • JSR 166 y: Concurrency and collections updates • Unicode 6.0 • Locale enhancement • Separate user locale and user-interface locale • JSR 203: More new I/O APIs for the Java platform (NIO.2) • TLS 1.2 • JDBC 4.1 • Create new platform APIs for 6u10 graphics features • Nimbus look-and-feel for Swing • Swing JLayer component • Update the XML stack Donnerstag, 15. Dezember 11 JSR 334: Small language enhancements aka „Project Coin“ Donnerstag, 15. Dezember 11 Strings in switch: " " " " " " " " " " " " String"s"=""JUG"Saxony"; switch"(s)"{ case""JUG"Saxony": " sayHello(s); " break; } Donnerstag, 15. Dezember 11 Erweiterte Notation in numerischen Literalen und binäre Integer-Literale: 1234_5678 1_2_3_4__5_6_7_8L 0b0001_0010_0100_1000 3.141_592_653_589_793d 0x1.ffff_ffff_ffff_fP1_023"//"Double.MAX_VALUE Donnerstag, 15. Dezember 11 Multi Catch und optimiertes Rethrow try { loadHelloTxt(file); } catch (IOException|SQLException e) { LOGGER.log(e); } Donnerstag, 15. Dezember 11 Generics: Diamond operator "Map<String,List<String>>"m"="new"HashMap<>(); Donnerstag, 15. Dezember 11 Try with resources try (InputStream in) { // Do stuff } // closed here Donnerstag, 15. Dezember 11 JSR 166 y: Concurrency and Collections Updates Donnerstag, 15. Dezember 11 Lightweight Fork/Join Framework • „Divide and Conquer“ mit java.util.concurrent if"(Aufgabe"klein"genug) ""direkte"Prozessierung else ""zerteile"Aufgabe"in"zwei"Teile ""prozessiere"beide"Teile"und"führe"die" Ergebnisse"zusammen Donnerstag, 15. Dezember 11 public"class"SearchJUGChampion"extends"RecursiveAction"{ private"List<JUGFan>"jugFanList; private"JUGFan"jugFan; private"int"max"="20000; public"SearchJUGChampion(List<JUGFan>"jugFanList){ this.jugFanList"="jugFanList; this.jugFan"="jugFans.get(0); } protected"void"computeDirectly()"{ for(JUGFan"jf:"userList)"{ if(jugFan.visitCount"<"jf.visitCount)"{ jugFan"="jf; } } } Donnerstag, 15. Dezember 11 protected"void"compute(){ int"listSize"="jugFanList.size(); if(listSize"<"max){ computeDirectly(); }"else"{ int"split"="listSize"/"2; SearchJUGChampion0left0=0 new0SearchJUGChampion(jugFanList.subList(0,split)); SearchJUGChampion0right0=0 new0SearchJUGChampion(jugFanList.subList(split,listSize)); invokeAll(left,right); if(left.jugFan.visitCount">"right.jugFan.visitCount){ jugFan"="left.jugFan; }"else"{ jugFan"="right.jugFan; } } } Donnerstag, 15. Dezember 11 ForkJoinPool"pool"="new"ForkJoinPool(); SearchJUGChampion"sjc"="new"SearchJUGChampion(jugFanList); " pool.invoke(sjc); " return"sjc.getJugFan; Donnerstag, 15. Dezember 11 JSR 292: Invokedynamic Donnerstag, 15. Dezember 11 Neuer Bytecode: invokedynamic Performance-Boost für dynamische typisierte Sprachen: 150-200% Donnerstag, 15. Dezember 11 JRuby - Ruby auf der JVM - Das Beste zweier Welten 15.03.2012 19:00Uhr JRuby Donnerstag, 15. Dezember 11 Next: In-Memory Datagrids Donnerstag, 15. Dezember 11