java 7, or jdk 7 updates or jdk 8 - dalibor topic - december 2011

65
Thursday, December 8, 2011

Upload: jug-lausanne

Post on 10-May-2015

1.170 views

Category:

Technology


1 download

DESCRIPTION

Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

TRANSCRIPT

Page 1: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

Thursday, December 8, 2011

Page 2: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

<Insert Picture Here>

Java SE 7: The Platform EvolvesJUG Lausanne, November 30th, 2011Dalibor TopicJava F/OSS Ambassador

Thursday, December 8, 2011

Page 3: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 4: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 5: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

Priorities for the Java Platforms

Grow Developer Base

Grow Adoption

Increase Competitiveness

Adapt to change

Thursday, December 8, 2011

Page 7: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

How Java Evolves and Adapts

Community Development of Java Technology

Specifications

Thursday, December 8, 2011

Page 8: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 9: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 10: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

10

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

Thursday, December 8, 2011

Page 11: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

11

So you want to change the language?

Thursday, December 8, 2011

Page 12: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 13: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

13

<Insert Picture Here>

Section DividerSmall

LanguageChanges

Project Coin

Thursday, December 8, 2011

Page 14: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

14

coin, n. A piece of small changecoin, v. To create new language

Thursday, December 8, 2011

Page 15: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 16: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 17: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

17

String Switch Statement

• Today case label includes integer constants and enum constants

• Strings are constants too (immutable)

Thursday, December 8, 2011

Page 18: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 19: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

19

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: ...

Thursday, December 8, 2011

Page 20: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

20

Simplifying Generics

• Pre-genericsList strList = new ArrayList();

Thursday, December 8, 2011

Page 21: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

21

Simplifying Generics

• Pre-genericsList strList = new ArrayList();• With GenericsList<String> strList = new ArrayList<String>();

Thursday, December 8, 2011

Page 22: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

22

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>>();

Thursday, December 8, 2011

Page 23: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

23

Diamond Operator

• Pre-genericsList strList = new ArrayList();• With Generics

• With diamond (<>) compiler infers type

List<String> strList = new ArrayList<String>();List<Map<String, List<String>> strList = new ArrayList<Map<String, List<String>>();

List<String> strList = new ArrayList<>();List<Map<String, List<String>> strList = new ArrayList<>();

Thursday, December 8, 2011

Page 24: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 25: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 26: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 27: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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 frompotentially three places.

Details of first two could be lost

Thursday, December 8, 2011

Page 28: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 29: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 30: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 31: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

31

Varargs Warnings

class 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 creation for varargs parameter of type List<String>[] Arrays.asList(Arrays.asList("January", ^1 warning

Thursday, December 8, 2011

Page 32: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 33: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

33

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;}

Thursday, December 8, 2011

Page 34: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

34

Multi-Catch

try { ...} catch (ClassCastException e) { doSomethingClever(e); throw e;} catch(InstantiationException | NoSuchMethodException | InvocationTargetException e) { log(e); throw e;}

Thursday, December 8, 2011

Page 35: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

35Thursday, December 8, 2011

Page 36: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 37: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 38: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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 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();

Thursday, December 8, 2011

Page 39: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 40: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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<Path> dir = srcPath.newDirectoryStream(“*.java”)) { for (Path file: dir) System.out.println(file.getName());}

Thursday, December 8, 2011

Page 41: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 42: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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 taskelse fork task into x number of smaller/similar task join the results

Thursday, December 8, 2011

Page 43: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 44: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

44

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()); } }}

Thursday, December 8, 2011

Page 45: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 46: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 47: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 48: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

48

JLayer componentEasy enrichment for Swing components

Thursday, December 8, 2011

Page 49: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

49

The DaVinci Machine Project (JSR-292)(A multi-language renaissance for the JVM)

Better

Thursday, December 8, 2011

Page 50: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 51: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 52: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

52

Languages Running on the JVM

51

Clojure

Tcl

JavaScript

v-language

CAL

Sather

Funnel

MiniPLAN

Lisp

Scheme

Basic

Logo JHCR

TermWare

Drools

Prolog

LLP

JESS

Eiffel

Smalltalk

C#

G

GroovyNice

Anvil

Hojo

Correlate

Ada

Bex Script

Tea

PHP

PhobosSleep

FScript

JudoScript

JRuby

ObjectScript

Jickle

Yoix

Simkin

BeanShell

DawnWebL

iScript

Jython

Pnuts

Yassl

Forth

PiccolaSALSA

Processing

Zigzag

Tiger

Tiger

Icon Pascal

Oberon

Modula-2

Luck

E

Rexx JavaFX Script Scala

Thursday, December 8, 2011

Page 53: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 54: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 55: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

55

invokedynamic Illustratedthis[method_name](x, y)

invokedynamic [#bootstrapMethod] .this_method_name

class LangaugeRuntime { bootstrapMethod(info) { ... return new CallSite(); }

class AClass { aMethod(x, y) { ... }

CallSite

MethodHandle

1. Invoke bootstrap

2. Produces CallSite

3.Complete linkage

4. Invokes method implementation

Thursday, December 8, 2011

Page 56: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 57: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 58: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

JVM Convergence – Forward lookingProject “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

Page 59: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

JDK Roadmap

2011 2012 2013

JDK 7u2• JRE 7 on java.com• JavaFX 2.0 co-install

Last publicJDK 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

Page 60: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 61: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 62: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 63: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 64: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

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

Page 65: Java 7, or JDK 7 Updates or JDK 8 - Dalibor Topic - December 2011

65Thursday, December 8, 2011