Java se-7-evolves-toulouse-jug-2001-09-14
Upcoming SlideShare
Loading in...5
×
 

Java se-7-evolves-toulouse-jug-2001-09-14

on

  • 3,708 views

Présentation de Java 7 faite par Terrence Barr le mercredi 14 à Toulouse pour le Toulouse Java User Group.

Présentation de Java 7 faite par Terrence Barr le mercredi 14 à Toulouse pour le Toulouse Java User Group.

Statistics

Views

Total Views
3,708
Views on SlideShare
2,320
Embed Views
1,388

Actions

Likes
1
Downloads
72
Comments
1

16 Embeds 1,388

http://redes2.iecisaportales.es 479
http://www.red.es 439
http://portales.red.es 183
http://portaliecisa.es 146
http://wiki.almerys.local 46
http://redes3.iecisaportales.es 25
http://localhost 21
http://redes4.iecisaportales.es 16
http://redesapp02new 10
http://redes1.iecisaportales.es 8
http://produccion.red.es 6
http://www.mefeedia.com 3
http://10.1.0.142 2
http://lanyrd.com 2
http://www.tawdis.net 1
https://si0.twimg.com 1
More...

Accessibility

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…
  • Where is an error at slide 31.
    Should be used ';' instead of ',' in the try-with-resources definition
    try (InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest)) {
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Java se-7-evolves-toulouse-jug-2001-09-14 Java se-7-evolves-toulouse-jug-2001-09-14 Presentation Transcript

  • <Insert Picture Here>Java SE 7: The Platform EvolvesTerrence BarrSenior Technologist, Mobile & Embedded TechnologiesEmail: terrence.barr@oracle.comBlog: terrencebarr.wordpress.com
  • DisclaimerThe preceding is intended to outline our generalproduct direction. It is intended for informationpurposes only, and may not be incorporated into anycontract. It is not a commitment to deliver anymaterial, code, or functionality, and should not berelied upon in making purchasing decisions.The development, release, and timing of anyfeatures or functionality described for Oracle’sproducts remains at the sole discretion of Oracle. 3 3
  • Agenda• Context • Priorities, Evolution, Communities• Java SE 7 • Language Changes: Project Coin • Library Changes: NIO2, Fork/Join • JVM Changes: The DaVinci Machine • Miscellaneous Updates, Platform/OS Support• Java SE 8 • Project Jigsaw: Modularizing the Java Platform • Project Lambda: Closures and More• Java SE Products• Wrap-Up 4 4
  • Context 5 5
  • Priorities for the Java Platforms Grow Developer Base Grow Adoption Increase Competitiveness Adapt to change
  • Java Communities
  • Definitions Java Standard Edition (Java SE) vs. Java Development Kit (JDK)• Java SE • Java Development Kit • Definition of the software • Oracles implementation of platform Java SE • Specification documents • Additional features not in • Implementation the spec • Test suite (TCK) • Tools and documentation • Implemented by several • Deployment and groups management capabilities • Produced in the JCP • Performance features • Produced in the OpenJDK project 8 8
  • How Java Evolves and Adapts Community Development of Java Technology Specifications
  • JCP Reforms• Developers’ voice in the Executive Committee • SOUJava • Goldman Sachs • London JavaCommunity • Alex Terrazas• JCP starting a program of reform • JSR 348: Towards a new version of the JCP
  • OpenJDK @ Oracle: One Year On• Clear commitment from Oracle• Roadmap for releases in 2011, 2012• JVM strategy for HotSpot & JRockit• Increased industry participation• Moving the Java SE platform forward again• Rebooting governance & retooling infrastructure• Were hiring! 11 11
  • Java SE 7 12 12
  • Evolving the LanguageFrom “Evolving the Java Language” - JavaOne 2005• Java language principles – Reading is more important than writing – Code should be a joy to read – The language should not hide what is happening – Code should do what it seems to do – Simplicity matters – Every “good” feature adds more “bad” weight – Sometimes it is best to leave things out• One language: with the same meaning everywhere • No dialects• We will evolve the Java language • But cautiously, with a long term view • “first do no harm” also “Growing a Language” - Guy Steele 1999 “The Feel of Java” - James Gosling 1997 13 13
  • So you want to change the language? 14 14
  • Java SE 7 Release Contents• JSR-336: Java SE 7 Release Contents• Java Language • Project Coin (JSR-334)• Class Libraries • NIO2 (JSR-203) • Fork-Join framework, ParallelArray (JSR-166y)• Java Virtual Machine • The DaVinci Machine project (JSR-292) • invokedynamic bytecode• Miscellaneous Things 15 15
  • SmallSection Divider <Insert Picture Here> Language Changes Project Coin 16 16
  • coin, n. A piece of small changecoin, v. To create new language 17 17
  • Project Coin Constraints• Small language changes • Small in specification, implementation, testing • No new keywords! • Wary of type system changes• Coordinate with larger language changes – Project Lambda – Modularity• One language, one javac 18 18
  • Better Integer Literal• Binary literals int mask = 0b101010101010;• With underscores for clarity int mask = 0b1010_1010_1010; long big = 9_223_783_036_967_937L; 19 19
  • String Switch Statement• Today case label includes integer constants and enum constants• Strings are constants too (immutable) 20 20
  • Discriminating Strings Todayint monthNameToDays(String s, int year) { if("April".equals(s) || "June".equals(s) || "September".equals(s)||"November".equals(s)) return 30; if("January".equals(s) || "March".equals(s) || "May".equals(s) || "July".equals(s) || "August".equals(s) || "December".equals(s)) return 31; if("February".equals(s)) ... 21 21
  • Strings in Switch Statementsint monthNameToDays(String s, int year) { switch(s) { case "April": case "June": case "September": case "November": return 30; case "January": case "March": case "May": case "July": case "August": case "December": return 31; case "February”: ... default: ... 22 22
  • Simplifying Generics• Pre-genericsList strList = new ArrayList(); 23 23
  • Simplifying Generics• Pre-genericsList strList = new ArrayList();• With GenericsList<String> strList = new ArrayList<String>(); 24 24
  • Simplifying Generics• Pre-genericsList strList = new ArrayList();• With GenericsList<String> strList = new ArrayList<String>();List<Map<String, List<String>> strList = new ArrayList<Map<String, List<String>>(); 25 25
  • Diamond Operator• Pre-genericsList strList = new ArrayList();• With GenericsList<String> strList = new ArrayList<String>();List<Map<String, List<String>> strList = new ArrayList<Map<String, List<String>>();• With diamond (<>) compiler infers typeList<String> strList = new ArrayList<>();List<Map<String, List<String>> strList = new ArrayList<>(); 26 26
  • Copying a FileInputStream in = new FileInputStream(src);OutputStream out = new FileOutputStream(dest);byte[] buf = new byte[8192];int n;while (n = in.read(buf)) >= 0) out.write(buf, 0, n); 27 27
  • Copying a File (Better, but wrong)InputStream in = new FileInputStream(src);OutputStream out = new FileOutputStream(dest);try { byte[] buf = new byte[8192]; int n; while (n = in.read(buf)) >= 0) out.write(buf, 0, n);} finally { in.close(); out.close();} 28 28
  • Copying a File (Correct, but complex)InputStream in = new FileInputStream(src);try { OutputStream out = new FileOutputStream(dest); try { byte[] buf = new byte[8192]; int n; while (n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { out.close(); }} finally { in.close();} 29 29
  • Copying a File (Correct, but complex)InputStream in = new FileInputStream(src);try { OutputStream out = new FileOutputStream(dest); try { byte[] buf = new byte[8192]; int n; while (n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { out.close(); }} finally { Exception thrown from potentially three places. in.close(); Details of first two could be lost} 30 30
  • Automatic Resource Managementtry (InputStream in = new FileInputStream(src), OutputStream out = new FileOutputStream(dest)){ byte[] buf = new byte[8192]; int n; while (n = in.read(buf)) >= 0) out.write(buf, 0, n);} 31 31
  • The Details• Compiler desugars try-with-resources into nested try- finally blocks with variables to track exception state• Suppressed exceptions are recorded for posterity using a new facillity of Throwable• API support in JDK 7 • New superinterface java.lang.AutoCloseable • All AutoCloseable and by extension java.io.Closeable types useable with try-with-resources • anything with a void close() method is a candidate • JDBC 4.1 retrofitted as AutoCloseable too 32 32
  • More Informative Backtracesjava.io.IOException at Suppress.write(Suppress.java:19) at Suppress.main(Suppress.java:8) Suppressed: java.io.IOException at Suppress.close(Suppress.java:24) at Suppress.main(Suppress.java:9) Suppressed: java.io.IOException at Suppress.close(Suppress.java:24) at Suppress.main(Suppress.java:9) 33 33
  • Varargs Warningsclass Test { public static void main(String... args) { List<List<String>> monthsInTwoLanguages = Arrays.asList(Arrays.asList("January", "February"), Arrays.asList("Gennaio", "Febbraio" )); }}Test.java:7: warning:[unchecked] unchecked generic array creationfor varargs parameter of type List<String>[] Arrays.asList(Arrays.asList("January", ^1 warning 34 34
  • Heap Pollution – JLSv3 4.12.2.1• A variable of a parameterized type refers to an object that is not of that parameterized type• For example, the variable of type List<String>[] might point to an array of Lists where the Lists did not contain strings• Reports possible locations of ClassCastExceptions at runtime• A consequence of erasure• Possibly properly addressed by reification in the future 35 35
  • Varargs Warnings Revised• New mandatory compiler warning at suspect varargs method declarations• By applying an annotation at the declaration, warnings at the declaration and call sites can be suppressed• @SuppressWarnings(value = “unchecked”)• @SafeVarargs 36 36
  • Exceptions Galoretry { ...} catch(ClassNotFoundException cnfe) { doSomethingClever(cnfe); throw cnfe;} catch(InstantiationException ie) { log(ie); throw ie;} catch(NoSuchMethodException nsme) { log(nsme); throw nsme;} catch(InvocationTargetException ite) { log(ite); throw ite;} 37 37
  • Multi-Catchtry { ...} catch (ClassCastException e) { doSomethingClever(e); throw e;} catch(InstantiationException | NoSuchMethodException | InvocationTargetException e) { log(e); throw e;} 38 38
  • More Precise Rethrow try { // Reflective operations calling Class.forName, // Class.newInstance, Class.getMethod, // Method.invoke, etc. } catch(ReflectiveOperationException e) { //e means any of the subtype thrown from try {} log(e); ReflectiveOperationException throw e; } ClassNotFoundException InstantiationException NoSuchMethodException InvocationTargetExceptionhttp://download.java.net/jdk7/docs/api/java/lang/ReflectiveOperationException.html39 39
  • 4040
  • New I/O 2 (NIO2) Libraries JSR 203• Original Java I/O APIs presented challenges for developers • Not designed to be extensible • Many methods do not throw exceptions as expected • rename() method works inconsistently • Developers want greater access to file metadata• Java NIO2 solves these problems 41 41
  • Java NIO2 Features• Path is a replacement for File • Biggest impact on developers• Better directory support • list() method can stream via iterator • Entries can be filtered using regular expressions in API• Symbolic link support• java.nio.file.Filesystem • interface to a filesystem (FAT, ZFS, Zip archive, network, etc)• java.nio.file.attribute package • Access to file metadata 42 42
  • Path Class• Equivalent of java.io.File in the new API – Immutable• Have methods to access and manipulate Path• Few ways to create a Path – From Paths and FileSystem//Make a reference to the pathPath home = Paths.get(“/home/fred”);//Resolve tmp from /home/fred -> /home/fred/tmpPath tmpPath = home.resolve(“tmp”);//Create a relative path from tmp -> ..Path relativePath = tmpPath.relativize(home)File file = relativePath.toFile(); 43 43
  • File Operation – Copy, Move• File copy is really easy – With fine grain controlPath src = Paths.get(“/home/fred/readme.txt”);Path dst = Paths.get(“/home/fred/copy_readme.txt”);Files.copy(src, dst, StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING);• File move is supported – Optional atomic move supportedPath src = Paths.get(“/home/fred/readme.txt”);Path dst = Paths.get(“/home/fred/readme.1st”);Files.move(src, dst, StandardCopyOption.ATOMIC_MOVE); 44 44
  • Directories• DirectoryStream iterate over entries – Scales to large directories – Uses less resources – Smooth out response time for remote file systems – Implements Iterable and Closeable for productivity• Filtering support – Build-in support for glob, regex and custom filtersPath srcPath = Paths.get(“/home/fred/src”);try (DirectoryStream<Path> dir = srcPath.newDirectoryStream(“*.java”)) { for (Path file: dir) System.out.println(file.getName());} 45 45
  • The Free Lunch Is Over! Image courtesy of Herb Sutter Image courtesy of Herb Sutter 46 46
  • Concurrency in Java• Pre-Java SE 5 • Thread, Runnable, monitor synchronization • Low level, must write a lot of tricky code yourself• Java SE 5 • JSR 166, 166x: Executor framework, Callable, Future, Lock, synchronizers, concurrent collections • Best for coarse-grain tasks, with interdependent shared data• Java SE 7 • JSR 166y: Fork/Join framework, build on JSR166, 166x • Best for fine-grained, independent tasks and data • Efficient use of processor cycles, including work stealing 47 47
  • Key Classes• ForkJoinPool – Executor service for running ForkJoinTask• ForkJoinTask – The base class for forkjoin task• RecursiveAction – A subclass of ForkJoinTask – A recursive resultless task – Implements compute() abstract method to perform calculation• RecursiveTask – Similar to RecursiveAction but returns a result 48 48
  • Fork Join Algorithm• Near always recursive – Probably not efficient unless it is• Designed for task that can be broken down into smaller pieces – Eg. Fibonacci number fib(10) = fib(9) + fib(8) Result solve(Problem problem) if (problem is small) { directly solve problem } else { split problem into independent parts fork new subtasks to solve each part join all subtasks compose result from sub-results } } 49 49
  • ForkJoin Example – Fibonaccipublic class Fibonacci extends RecursiveTask<Integer> { private final int number; public Fibonacci(int n) { number = n; } @Override protected Integer compute() { switch (number) { case 0: return (0); case 1: return (1); default: Fibonacci f1 = new Fibonacci(number – 1); Fibonacci f2 = new Fibonacci(number – 2); f1.fork(); f2.fork(); return (f1.join() + f2.join()); } }} 50 50
  • ForkJoin Example – FibonacciForkJoinPool pool = new ForkJoinPool();Fibonacci r = new Fibonacci(10);pool.submit(r);while (!r.isDone()) { //Do some work ...}System.out.println("Result of fib(10) = " + r.get()); 51 51
  • Client Libraries• Nimbus Look and Feel• Platform APIs for shaped and translucent windows• JLayer (formerly from Swing labs)• Optimized 2D rendering 52 52
  • Nimbus Look and Feel• Better than Metal for cross platform look-and-feel• Introduced in Java SE 6u10, now part of Swing• Not the default L&F 53 53
  • JLayer componentEasy enrichment for Swing components 54 54
  • JLayer component The universal decorator• Transparent decorator for a Swing component• Controls the painting of its subcomponents• Catches all input and focus events for the whole hierarchy // wrap your component with JLayer JLayer<JPanel> layer = new JLayer<JPanel>(panel); // custom ui provides all extra functionality layer.setUI(myLayerUI); // add the layer as usual component frame.add(layer); 55 55
  • Miscellaneous Updates• Security • Eliptic curve cryptography • TLS 1.2• JAXP 1.4.4 (Java API for XML processing)• JAX-WS 2.2 (Java API for XML Web Services)• JAXB 2.2 (Java Architecture for XML Binding)• ClassLoader architecture changes• close() for URLClassLoader• Javadoc support for CSS• and more: http://openjdk.java.net/projects/jdk7/features/#f352 56 56
  • The DaVinci Machine Project (JSR-292)(A multi-language renaissance for the JVM) Better 57 57
  • Languages Like Virtual Machines• Programming languages need runtime support • Memory management / Garbage collection • Concurrency control • Security • Reflection • Debugging integration • Standard libraries• Compiler writers have to build these from scratch• Targeting a VM allows reuse of infrastructure 58 58
  • JVM Specification“The Java virtual machine knows nothing about the Javaprogramming language, only of aparticular binary format, the class file format.” 1.2 The Java Virtual Machine Spec. 59 59
  • Languages Running on the JVM Tea Zigzag JESS Jickle iScript Modula-2 Lisp Correlate Nice CAL JudoScript JavaScript Simkin Drools Basic Icon Groovy Eiffel v-language Pascal Luck Prolog Mini Tcl PLAN HojoRexx JavaFX Script Scala Funnel Tiger Anvil Yassl Oberon FScript E Smalltalk Logo Tiger JHCR JRuby Ada G Scheme Clojure Phobos Processing WebL Dawn TermWare Sather Sleep LLP Pnuts Bex Script BeanShell Forth PHP C# Yoix SALSA ObjectScript Jython Piccola 60 60 60
  • InvokeDynamic Bytecode• JVM currently has four ways to invoke method • Invokevirtual, invokeinterface, invokestatic, invokespecial• All require full method signature data• InvokeDynamic will use method handle • Effectively an indirect pointer to the method• When dynamic method is first called bootstrap code determines method and creates handle• Subsequent calls simply reference defined handle• Type changes force a re-compute of the method location and an update to the handle • Method call changes are invisible to calling code 61 61
  • CallSite and MethodHandle• invokedynamic linked to a CallSite – CallSite can be linked or unlinked – CallSite holder of MethodHandle• MethodHandle is a directly executable reference to an underlying method, constructor, field – Can transform arguments and return type – Transformation – conversion, insertion, deletion, substitution 62 62
  • invokedynamic Illustratedthis[method_name](x, y)invokedynamic [#bootstrapMethod] .this_method_name 1. Invoke bootstrap class LangaugeRuntime { 2. Produces bootstrapMethod(info) { CallSite ... 3.Complete linkage return new CallSite(); CallSite } class AClass { aMethod(x, y) { 4. Invokes method Method ... implementation Handle } 63 63
  • JDK 7 Platform Support• Windows x86 • Server 2008, Server 2008 R2, 7 & 8 (when it GAs) • 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• Apple OSX x86 • Well underway - will be supported post-GA, detailed plan TBDNote: JDK 7 should run on pretty much any Windows/Linux/Solaris. These configurations are the ones primarily tested by Oracle, and for which we provide commercial support. 64 64
  • Java SE 8 65 65
  • Java SE 8 Project Jigsaw (JSR-294) Modularising the Java Platform Project Lambda (JSR 335) Closures and lambda expressions Better support for multi-core processors More Project Coin Small Language Changes 66 66
  • The Modular Java Platform• Enables escape from “JAR Hell” – Eliminates class path – Package modules for automatic download & install – Generate native packages – deb, rpm, ips, etc• Enables significant performance improvements – Incremental download → fast classloading – Optimise module content during installation• Platform scalability – down to small devices – Well-specified SE subsets can fit into small devices 67 67
  • module-info.javaEntry point Module name Versionmodule com.foo @ 1.0.0 { class com.foo.app.Main requires org.bar.lib @ 2.1-alpha; requires edu.baz.util @ 5.2_11; provides com.foo.app.lib @ 1.0.0;} Dependency Virtual module 68 68
  • Project Lambda Closures and more openjdk.java.net/projects/lambda• Lambda expressions – Way of defining anonymous methods without interface workaround• SAM (Single Abstract Method) conversion with target typing• Method references• Library enhancements for internal iteration 69 69
  • Hypothetical Internal Iterationdouble highestScore = students .filter(new Predicate<Student>() { public boolean isTrue(Student s) { return s.gradYear == 2010; }}) .map(new Extractor<Student,Double>() { public Double extract(Student s) { return s.score; }}) .max();• Not inherently serial – students traversal not determined by developer – Looks like a functional language• Anonymous inner class! 70 70
  • Introducing Lambda Expressionsdouble highestScore = students .filter(#{ Student s -> s.gradYear == 2010 }) .map(#{ Student s -> s.score }) .max(); • Lambda expressions introduced with # – Signal to the JVM to defer execution of the code – Body may be an expression • Lambda expression are not syntactic sugar for anonymous inner class – Implemented with MethodHandle from JSR-292 71 71
  • Products 72 72
  • JVM Convergence – Forward looking Project “HotRockit”JDK 7 GA – 07/11 JDK 7u2 JDK 7uX JDK 8 GA• Hotspot 21 • Hotspot 22 • Hotspot 23 • Hotspot24• Java SE 7 Support • Performance • More performance • Java SE 8 Support• Rebranding • Enable large heaps • Improved command • All performance• Improved JMX with reasonable line servicability features from latencies (jcmd) JRockit ported Agent • Enable large heaps • All servicability• Command line with consistent features from servicability tool reasonable latencies JRockit ported (jrcmd) • No PermGen • Compiler controls • Verbose logging --- Premium --- --- Premium --- --- Premium --- • Complete JRockit • JRockit Mission• Improved JRockit Flight Recorder Control Memleak Mission Control Support Tool Support Console support • Soft Real Time GC
  • New Java SE Products 74 74
  • Wrap-Up 75 75
  • JavaOne San FranciscoOct 2-6, 2011• More Community Focus • Standalone conference, dedicated venues • New keynote hall, large exhibition hall (~50 exhibitors) • Mason Street Cafe, Hang-Out Zones” throughout conference • Gatherings, events, parties, and networking opportunities • Easier to navigate, better signage and information• Lots of High-Quality Content • 7 tracks, >400 Keynotes/Sessions/BOFs/HOLs • Deep technical content from the experts • ~60% industry content, ~40% Oracle • Plus: Java University• Register Now! 76 76
  • Conclusion• Java SE 7 • Incremental changes - Evolutionary, not revolutionary • Good solid set of features to make developers life easier• Java SE 8 • Major new features: Modularisation and Closures • More smaller features to be defined • Release: Scheduled for 2nd half of 2012• Java Evolution Continues • Grow and adapt to the changing world of IT • Oracle and its partners are committed to a vibrant and evolving Java ecosystem 77 77
  • Resources Java SE Home Page  http://www.oracle.com/technetwork/java/javase/overview/index.html JDK 7 download  http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK 7 + NetBeans 7.0.1 download  http://www.oracle.com/technetwork/java/javase/downloads/jdk-7- netbeans-download-432126.html JDK 7 Launch Event and Information  http://terrencebarr.wordpress.com/2011/07/28/java-se-7-now- generally-available/ The Java Spotlight Podcast  http://www.thejavaspotlight.org/ 78 78
  • 7979