Slide 1

Slide 1 text

Thursday, December 8, 2011

Slide 2

Slide 2 text

Java SE 7: The Platform Evolves eJUG Linz, November 29th, 2011 Dalibor Topic Java F/OSS Ambassador Thursday, December 8, 2011

Slide 3

Slide 3 text

The following 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. Thursday, December 8, 2011

Slide 4

Slide 4 text

4 Audience Survey • Downloaded JDK 7 GA or 7u1? • Using it? • Download a JDK 7 Mac OS X Port - Developer Preview Release build? • http://jdk7.java.net/macportpreview • Subscribed to an OpenJDK mailing list like jdk7u-dev? • Contributed to OpenJDK? • http://openjdk.java.net/contribute • Following @OpenJDK on Twitter? • Following @Java on Twitter? • Listening to Java Spotlight podcast? • Subscribed to Java Magazine? Thursday, December 8, 2011

Slide 5

Slide 5 text

Priorities for the Java Platforms Grow Developer Base Grow Adoption Increase Competitiveness Adapt to change Thursday, December 8, 2011

Slide 6

Slide 6 text

Java Communities Thursday, December 8, 2011

Slide 7

Slide 7 text

How Java Evolves and Adapts Community Development of Java Technology Specifications Thursday, December 8, 2011

Slide 8

Slide 8 text

Java Community Process 2.8 • Expert Group transparency • EG must do all substantive business on a public mailing list • EG must track issues in a public issue tracker • EG must respond publicly to all comments • Executive Committee transparency • EC must hold public meetings and teleconferences, and publish minutes • EC must provide a public mailing list for JCP member feedback • TCK and License transparency • TCK licensing must permit public discussion of testing process and results • Spec Lead cannot withdraw a spec/RI/TCK license once offered Thursday, December 8, 2011

Slide 9

Slide 9 text

Java Community Process 2.8 • Participation • EG nominations and Spec Lead responses must be public • EG members are identified by name and company • Agility • JSRs must reach Early Draft Review within nine months • JSRs must reach Public Review within 12 months after EDR • JSRs must reach Final Release within 12 months after PR • Faster and simpler Maintenance Releases • JCP 2.8 is mandatory for new JSRs, and in-flight JSRs are encouraged to adopt it Thursday, December 8, 2011

Slide 10

Slide 10 text

10 Evolving the Language From “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 Thursday, December 8, 2011

Slide 11

Slide 11 text

11 So you want to change the language? Thursday, December 8, 2011

Slide 12

Slide 12 text

12 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 • JSR-336: Java SE 7 Release Contents Thursday, December 8, 2011

Slide 13

Slide 13 text

13 Section Divider Small Language Changes Project Coin Thursday, December 8, 2011

Slide 14

Slide 14 text

14 coin, n. A piece of small change coin, v. To create new language Thursday, December 8, 2011

Slide 15

Slide 15 text

15 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 Thursday, December 8, 2011

Slide 16

Slide 16 text

16 Better Integer Literal • Binary literals • With underscores for clarity int mask = 0b101010101010; int mask = 0b1010_1010_1010; long big = 9_223_783_036_967_937L; Thursday, December 8, 2011

Slide 17

Slide 17 text

17 String Switch Statement • Today case label includes integer constants and enum constants • Strings are constants too (immutable) Thursday, December 8, 2011

Slide 18

Slide 18 text

18 Discriminating Strings Today int 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)) ... Thursday, December 8, 2011

Slide 19

Slide 19 text

19 Strings in Switch Statements int 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: ... Thursday, December 8, 2011

Slide 20

Slide 20 text

20 Simplifying Generics • Pre-generics List strList = new ArrayList(); Thursday, December 8, 2011

Slide 21

Slide 21 text

21 Simplifying Generics • Pre-generics List strList = new ArrayList(); • With Generics List strList = new ArrayList(); Thursday, December 8, 2011

Slide 22

Slide 22 text

22 Simplifying Generics • Pre-generics List strList = new ArrayList(); • With Generics List strList = new ArrayList(); List> strList = new ArrayList>(); Thursday, December 8, 2011

Slide 23

Slide 23 text

23 Diamond Operator • Pre-generics List strList = new ArrayList(); • With Generics • With diamond (<>) compiler infers type List strList = new ArrayList(); List> strList = new ArrayList>(); List strList = new ArrayList<>(); List> strList = new ArrayList<>(); Thursday, December 8, 2011

Slide 24

Slide 24 text

24 Copying a File 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); Thursday, December 8, 2011

Slide 25

Slide 25 text

25 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(); } Thursday, December 8, 2011

Slide 26

Slide 26 text

26 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(); } Thursday, December 8, 2011

Slide 27

Slide 27 text

27 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(); } Exception thrown from potentially three places. Details of first two could be lost Thursday, December 8, 2011

Slide 28

Slide 28 text

28 Automatic Resource Management try (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); } Thursday, December 8, 2011

Slide 29

Slide 29 text

29 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 retrefitted as AutoCloseable too Thursday, December 8, 2011

Slide 30

Slide 30 text

30 More Informative Backtraces java.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) Thursday, December 8, 2011

Slide 31

Slide 31 text

31 Varargs Warnings class Test { public static void main(String... args) { List> monthsInTwoLanguages = Arrays.asList(Arrays.asList("January", "February"), Arrays.asList("Gennaio", "Febbraio" )); } } Test.java:7: warning: [unchecked] unchecked generic array creation for varargs parameter of type List[] Arrays.asList(Arrays.asList("January", ^ 1 warning Thursday, December 8, 2011

Slide 32

Slide 32 text

32 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 Thursday, December 8, 2011

Slide 33

Slide 33 text

33 Exceptions Galore try { ... } 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; } Thursday, December 8, 2011

Slide 34

Slide 34 text

34 Multi-Catch try { ... } catch (ClassCastException e) { doSomethingClever(e); throw e; } catch(InstantiationException | NoSuchMethodException | InvocationTargetException e) { log(e); throw e; } Thursday, December 8, 2011

Slide 35

Slide 35 text

35 Thursday, December 8, 2011

Slide 36

Slide 36 text

36 New I/O 2 (NIO2) Libraries • 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 JSR 203 Thursday, December 8, 2011

Slide 37

Slide 37 text

37 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 Thursday, December 8, 2011

Slide 38

Slide 38 text

38 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 path Path home = Paths.get(“/home/fred”); //Resolve tmp from /home/fred -> /home/fred/tmp Path tmpPath = home.resolve(“tmp”); //Create a relative path from tmp -> .. Path relativePath = tmpPath.relativize(home) File file = relativePath.toFile(); Thursday, December 8, 2011

Slide 39

Slide 39 text

39 File Operation – Copy, Move • File copy is really easy – With fine grain control • File move is supported – Optional atomic move supported Path 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); Path src = Paths.get(“/home/fred/readme.txt”); Path dst = Paths.get(“/home/fred/readme.1st”); Files.move(src, dst, StandardCopyOption.ATOMIC_MOVE); Thursday, December 8, 2011

Slide 40

Slide 40 text

40 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 filters Path srcPath = Paths.get(“/home/fred/src”); try (DirectoryStream dir = srcPath.newDirectoryStream(“*.java”)) { for (Path file: dir) System.out.println(file.getName()); } Thursday, December 8, 2011

Slide 41

Slide 41 text

41 Concurrency APIs • JSR166y • Update to JSR166x which was an update to JSR166 • Adds a lightweight task framework • Also referred to as Fork/Join • Phaser • Barrier similar to CyclicBarrier and CountDownLatch • TransferQueue interface • Extension to BlockingQueue • Implemented by LinkedTransferQueue Thursday, December 8, 2011

Slide 42

Slide 42 text

42 Fork Join Framework • Goal is to take advantage of multiple processor • Designed for task that can be broken down into smaller pieces – Eg. Fibonacci number fib(10) = fib(9) + fib(8) • Typical algorithm that uses fork join if I can manage the task perform the task else fork task into x number of smaller/similar task join the results Thursday, December 8, 2011

Slide 43

Slide 43 text

43 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 Thursday, December 8, 2011

Slide 44

Slide 44 text

44 ForkJoin Example – Fibonacci public class Fibonacci extends RecursiveTask { 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()); } } } Thursday, December 8, 2011

Slide 45

Slide 45 text

45 ForkJoin Example – Fibonacci ForkJoinPool 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()); Thursday, December 8, 2011

Slide 46

Slide 46 text

46 Client Libraries • Nimbus Look and Feel • Platform APIs for shaped and translucent windows • JLayer (formerly from Swing labs) • Optimised 2D rendering Thursday, December 8, 2011

Slide 47

Slide 47 text

47 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 Thursday, December 8, 2011

Slide 48

Slide 48 text

48 JLayer component Easy enrichment for Swing components Thursday, December 8, 2011

Slide 49

Slide 49 text

49 The DaVinci Machine Project (JSR-292) (A multi-language renaissance for the JVM) Better Thursday, December 8, 2011

Slide 50

Slide 50 text

50 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 Thursday, December 8, 2011

Slide 51

Slide 51 text

51 JVM Specification “The Java virtual machine knows nothing about the Java programming language, only of a particular binary format, the class file format.” 1.2 The Java Virtual Machine Spec. Thursday, December 8, 2011

Slide 52

Slide 52 text

52 Languages Running on the JVM 51 Clojure Tcl JavaScript v-language CAL Sather Funnel Mini PLAN Lisp Scheme Basic Logo JHCR TermWare Drools Prolog LLP JESS Eiffel Smalltalk C# G Groovy Nice Anvil Hojo Correlate Ada Bex Script Tea PHP Phobos Sleep FScript JudoScript JRuby ObjectScript Jickle Yoix Simkin BeanShell Dawn WebL iScript Jython Pnuts Yassl Forth Piccola SALSA Processing Zigzag Tiger Tiger Icon Pascal Oberon Modula-2 Luck E Rexx JavaFX Script Scala Thursday, December 8, 2011

Slide 53

Slide 53 text

53 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 Thursday, December 8, 2011

Slide 54

Slide 54 text

54 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 Thursday, December 8, 2011

Slide 55

Slide 55 text

55 invokedynamic Illustrated this[method_name](x, y) invokedynamic [#bootstrapMethod] .this_method_name class LangaugeRuntime { bootstrapMethod(info) { ... return new CallSite(); } class AClass { aMethod(x, y) { ... } CallSite Method Handle 1. Invoke bootstrap 2. Produces CallSite 3.Complete linkage 4. Invokes method implementation Thursday, December 8, 2011

Slide 56

Slide 56 text

56 Miscellaneous Things • Security • Eliptic curve cryptography • TLS 1.2 • JAXP 1.4.4 • JAX-WS 2.2 • JAXB 2.2 • ClassLoader architecture changes • close() for URLClassLoader • Javadoc support for CSS Thursday, December 8, 2011

Slide 57

Slide 57 text

57 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 • will be supported post-GA, detailed plan TBD Note: 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. Thursday, December 8, 2011

Slide 58

Slide 58 text

JVM Convergence – Forward looking Project “HotRockit” • Hotspot 21 • Java SE 7 Support • Rebranding • Improved JMX Agent • Command line servicability tool (jrcmd) --- Premium --- • Improved JRockit Mission Control Console support JDK 7 GA – 07/11 • Hotspot 22 • Performance • Enable large heaps with reasonable latencies JDK 7u2 • Hotspot 23 • More performance • Improved command line servicability (jcmd) • Enable large heaps with consistent reasonable latencies • No PermGen --- Premium --- • Complete JRockit Flight Recorder Support JDK 7uX • Hotspot24 • Java SE 8 Support • All performance features from JRockit ported • All servicability features from JRockit ported • Compiler controls • Verbose logging --- Premium --- • JRockit Mission Control Memleak Tool Support • Soft Real Time GC JDK 8 GA Thursday, December 8, 2011

Slide 59

Slide 59 text

JDK Roadmap 2011 2012 2013 JDK 7u2 • JRE 7 on java.com • JavaFX 2.0 co-install Last public JDK 6 update JDK 8 • Windows, Linux, Solaris, OS X • Jigsaw • Lambda • JavaFX 3.0 • Complete Oracle JVM convergence • JavaScript interop • more JDK 7u6 • OS X JRE port (for end-users) • Improved OS integration, auto- update JDK 7 JDK 7u4 • OS X JDK Port (for developers) 2014 NetBeans 7 • Java SE 7 support • more NetBeans.next • Java SE 8 support • JavaFX 3.0 support • more Mac OS X • JDK 7 Dev Preview • JavaFX 2.0 Dev Preview NetBeans 7.1 • JavaFX 2.0 support Thursday, December 8, 2011

Slide 60

Slide 60 text

JDK 8 - Summer 2013 • Strong feedback from community – 2 years needed between JDK releases • Release date revised to summer 2013 (from late 2012) • Enables larger scope, such as: – Jigsaw – complete platform modularization, container support – Lambda – Bulk operations – JavaScript Interop – Device Support Theme Description/Content Project Jigsaw • Module system for Java applications and the Java platform Project Lambda • Closures and related features in the Java language (JSR 335) • Bulk parallel operations in Java collections APIs (filter/map/reduce) Oracle JVM Convergence • Complete migration of performance and serviceability features from JRockit, including Mission Control and the Flight Recorder JavaFX 3.0 • Next generation Java client JavaScript • Next-gen JavaScript-on-JVM engine (Project Nashorn) • JavaScript/Java interoperability on JVM Device Support • Multi-Touch (JavaFX), Camera, Location, Compass and Accelerometer Developer Productivity • Annotations on types (JSR 308), Minor language enhancements API and Other Updates • Enhancements to Security, Date/Time, (JSR 310) Networking, Internationalization, Accessibility, Packaging/Installation Open Source • Open development in OpenJDK, open source additional closed components EXPANDED EXPANDED NEW NEW Thursday, December 8, 2011

Slide 61

Slide 61 text

JDK Enhancement Proposal (JEP) Process • “A process for collecting, reviewing, sorting, and recording the results of proposals for enhancements to the JDK” • Goal: Produce a regularly-updated list of proposals to serve as the long-term Roadmap for JDK Release Projects • Looks at least three years into the future to allow time for the most complex proposals to be defined and implemented • Open to every OpenJDK Committer • Does not in any way supplant the Java Community Process Thursday, December 8, 2011

Slide 62

Slide 62 text

JEPs as of 11/11/11 (11:11:11) • 1 JDK Enhancement-Proposal & Roadmap Process • 2 JEP Template • 101 Generalized Target-Type Inference • 102 Process API Updates • 103 Parallel Array Sorting • 104 Annotations on Java Types • 105 DocTree API • 106 Add Javadoc to javax.tools • 107 Bulk Data Operations for Collections • 108 Collections Enhancements from Third-Party Libraries • 109 Enhance Core Libraries with Lambda • 110 New HTTP Client • 111 Additional Unicode Constructs for Regular Expressions • 112 Charset Implementation Improvements • 113 MS-SFU Kerberos 5 Extensions • 114 TLS Server Name Indication (SNI) Extension • 115 AEAD CipherSuites • 116 Extended Validation Certificates • 117 Remove the Annotation-Processing Tool (apt) • 118 Access to Parameter Names at Runtime • 119 javax.lang.model Implementation Backed by Core Reflection • 120 Repeating Annotations • 121 Stronger Algorithms for Password-Based Encryption • 122 Remove the Permanent Generation • 123 Configurable Secure Random-Number Generation • 124 Enhance the Certificate Revocation-Checking API • 125 Network Interface Aliases, Events, and Defaults • 126 Lambda Expressions and Virtual Extension Methods Thursday, December 8, 2011

Slide 63

Slide 63 text

63 Conclusions • 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 • Java continues to grow and adapt to the changing world of IT Thursday, December 8, 2011

Slide 64

Slide 64 text

64 The preceding 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. Thursday, December 8, 2011

Slide 65

Slide 65 text

65 Thursday, December 8, 2011