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

80

description

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

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

Page 1: Java se-7-evolves-toulouse-jug-2001-09-14
Page 2: Java se-7-evolves-toulouse-jug-2001-09-14

<Insert Picture Here>

Java SE 7: The Platform EvolvesTerrence BarrSenior Technologist, Mobile & Embedded TechnologiesEmail: [email protected]: terrencebarr.wordpress.com

Page 3: Java se-7-evolves-toulouse-jug-2001-09-14

33

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.

Disclaimer

Page 4: Java se-7-evolves-toulouse-jug-2001-09-14

44

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

Page 5: Java se-7-evolves-toulouse-jug-2001-09-14

55

Context

Page 6: Java se-7-evolves-toulouse-jug-2001-09-14

Priorities for the Java Platforms

Grow Developer Base

Grow Adoption

Increase Competitiveness

Adapt to change

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

Java Communities

Page 8: Java se-7-evolves-toulouse-jug-2001-09-14

88

DefinitionsJava Standard Edition (Java SE) vs.Java Development Kit (JDK)

• Java SE• Definition of the software

platform• Specification documents• Implementation• Test suite (TCK)

• Implemented by several groups

• Produced in the JCP

• Java Development Kit• Oracle's implementation of

Java SE• Additional features not in

the spec• Tools and documentation• Deployment and

management capabilities• Performance features• Produced in the OpenJDK

project

Page 9: Java se-7-evolves-toulouse-jug-2001-09-14

How Java Evolves and Adapts

Community Development of Java Technology Specifications

Page 10: Java se-7-evolves-toulouse-jug-2001-09-14

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

Page 11: Java se-7-evolves-toulouse-jug-2001-09-14

1111

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 • We're hiring!

Page 12: Java se-7-evolves-toulouse-jug-2001-09-14

1212

Java SE 7

Page 13: Java se-7-evolves-toulouse-jug-2001-09-14

1313

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

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

1414

So you want to change the language?

Page 15: Java se-7-evolves-toulouse-jug-2001-09-14

1515

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

Page 16: Java se-7-evolves-toulouse-jug-2001-09-14

1616

<Insert Picture Here>

Section DividerSmallSmall

LanguageLanguageChangesChanges

Project CoinProject Coin

Page 17: Java se-7-evolves-toulouse-jug-2001-09-14

1717

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

Page 18: Java se-7-evolves-toulouse-jug-2001-09-14

1818

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

Page 19: Java se-7-evolves-toulouse-jug-2001-09-14

1919

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;

Page 20: Java se-7-evolves-toulouse-jug-2001-09-14

2020

String Switch Statement

• Today case label includes integer constants and enum constants

• Strings are constants too (immutable)

Page 21: Java se-7-evolves-toulouse-jug-2001-09-14

2121

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

Page 22: Java se-7-evolves-toulouse-jug-2001-09-14

2222

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

Page 23: Java se-7-evolves-toulouse-jug-2001-09-14

2323

Simplifying Generics

• Pre-genericsList strList = new ArrayList();

Page 24: Java se-7-evolves-toulouse-jug-2001-09-14

2424

Simplifying Generics

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

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

Page 25: Java se-7-evolves-toulouse-jug-2001-09-14

2525

Simplifying Generics

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

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

Page 26: Java se-7-evolves-toulouse-jug-2001-09-14

2626

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

Page 27: Java se-7-evolves-toulouse-jug-2001-09-14

2727

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

Page 28: Java se-7-evolves-toulouse-jug-2001-09-14

2828

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

Page 29: Java se-7-evolves-toulouse-jug-2001-09-14

2929

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

Page 30: Java se-7-evolves-toulouse-jug-2001-09-14

3030

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

Page 31: Java se-7-evolves-toulouse-jug-2001-09-14

3131

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

Page 32: Java se-7-evolves-toulouse-jug-2001-09-14

3232

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

Page 33: Java se-7-evolves-toulouse-jug-2001-09-14

3333

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)

Page 34: Java se-7-evolves-toulouse-jug-2001-09-14

3434

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

Page 35: Java se-7-evolves-toulouse-jug-2001-09-14

3535

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

Page 36: Java se-7-evolves-toulouse-jug-2001-09-14

3636

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

Page 37: Java se-7-evolves-toulouse-jug-2001-09-14

3737

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;

}

Page 38: Java se-7-evolves-toulouse-jug-2001-09-14

3838

Multi-Catch

try {...

} catch (ClassCastException e) { doSomethingClever(e); throw e;} catch(InstantiationException |

NoSuchMethodException |InvocationTargetException e) {

log(e);throw e;

}

Page 39: Java se-7-evolves-toulouse-jug-2001-09-14

3939

More Precise Rethrowtry {

// 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);throw e;

}

ReflectiveOperationException

ClassNotFoundException

InstantiationException

NoSuchMethodException

InvocationTargetException

http://download.java.net/jdk7/docs/api/java/lang/ReflectiveOperationException.html

Page 40: Java se-7-evolves-toulouse-jug-2001-09-14

4040

Page 41: Java se-7-evolves-toulouse-jug-2001-09-14

4141

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

Page 42: Java se-7-evolves-toulouse-jug-2001-09-14

4242

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

Page 43: Java se-7-evolves-toulouse-jug-2001-09-14

4343

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

Page 44: Java se-7-evolves-toulouse-jug-2001-09-14

4444

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

Page 45: Java se-7-evolves-toulouse-jug-2001-09-14

4545

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

}

Page 46: Java se-7-evolves-toulouse-jug-2001-09-14

4646

The Free Lunch Is Over!

Image courtesy of Herb Sutter

Image courtesy of Herb Sutter

Page 47: Java se-7-evolves-toulouse-jug-2001-09-14

4747

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

Page 48: Java se-7-evolves-toulouse-jug-2001-09-14

4848

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

Page 49: Java se-7-evolves-toulouse-jug-2001-09-14

4949

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

Page 50: Java se-7-evolves-toulouse-jug-2001-09-14

5050

ForkJoin Example – Fibonacci

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

Page 51: Java se-7-evolves-toulouse-jug-2001-09-14

5151

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

Page 52: Java se-7-evolves-toulouse-jug-2001-09-14

5252

Client Libraries

• Nimbus Look and Feel• Platform APIs for shaped and translucent windows• JLayer (formerly from Swing labs)• Optimized 2D rendering

Page 53: Java se-7-evolves-toulouse-jug-2001-09-14

5353

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

Page 54: Java se-7-evolves-toulouse-jug-2001-09-14

5454

JLayer componentEasy enrichment for Swing components

Page 55: Java se-7-evolves-toulouse-jug-2001-09-14

5555

JLayer componentThe 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 JLayerJLayer<JPanel> layer = new JLayer<JPanel>(panel);

// custom ui provides all extra functionalitylayer.setUI(myLayerUI);

// add the layer as usual componentframe.add(layer);

Page 56: Java se-7-evolves-toulouse-jug-2001-09-14

5656

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

Page 57: Java se-7-evolves-toulouse-jug-2001-09-14

5757

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

Better

Page 58: Java se-7-evolves-toulouse-jug-2001-09-14

5858

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

Page 59: Java se-7-evolves-toulouse-jug-2001-09-14

5959

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.

Page 60: Java se-7-evolves-toulouse-jug-2001-09-14

6060

Languages Running on the JVM

60

Clojure

Tcl

JavaScript

v-language

CAL

Sather

Funnel

MiniPLAN

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

DawnWebL

iScript

Jython

Pnuts

Yassl

Forth

PiccolaSALSA

Processing

Zigzag

Tiger

Tiger

IconPascal

Oberon

Modula-2

Luck

E

Rexx JavaFX Script Scala

Page 61: Java se-7-evolves-toulouse-jug-2001-09-14

6161

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

Page 62: Java se-7-evolves-toulouse-jug-2001-09-14

6262

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

Page 63: Java se-7-evolves-toulouse-jug-2001-09-14

6363

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

Page 64: Java se-7-evolves-toulouse-jug-2001-09-14

6464

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

Page 65: Java se-7-evolves-toulouse-jug-2001-09-14

6565

Java SE 8

Page 66: Java se-7-evolves-toulouse-jug-2001-09-14

6666

More Project CoinSmall Language Changes

Project Lambda (JSR 335)Closures and lambda expressionsBetter support for multi-core processors

Project Jigsaw (JSR-294)Modularising the Java Platform

Java SE 8

Page 67: Java se-7-evolves-toulouse-jug-2001-09-14

6767

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

Page 68: Java se-7-evolves-toulouse-jug-2001-09-14

6868

module-info.java

module com.foo @ 1.0.0 {class com.foo.app.Mainrequires org.bar.lib @ 2.1-alpha;requires edu.baz.util @ 5.2_11;provides com.foo.app.lib @ 1.0.0;

}

Module name

VersionEntry point

Dependency

Virtual module

Page 69: Java se-7-evolves-toulouse-jug-2001-09-14

6969

Project LambdaClosures and moreopenjdk.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

Page 70: Java se-7-evolves-toulouse-jug-2001-09-14

7070

Hypothetical Internal Iteration

• Not inherently serial– students traversal not determined by developer– Looks like a functional language

• Anonymous inner class!

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

Page 71: Java se-7-evolves-toulouse-jug-2001-09-14

7171

Introducing Lambda Expressions

• 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

double highestScore = students.filter(#{ Student s -> s.gradYear == 2010 }).map(#{ Student s -> s.score }).max();

Page 72: Java se-7-evolves-toulouse-jug-2001-09-14

7272

Products

Page 73: Java se-7-evolves-toulouse-jug-2001-09-14

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

Page 74: Java se-7-evolves-toulouse-jug-2001-09-14

7474

New Java SE Products

Page 75: Java se-7-evolves-toulouse-jug-2001-09-14

7575

Wrap-Up

Page 76: Java se-7-evolves-toulouse-jug-2001-09-14

7676

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!

Page 77: Java se-7-evolves-toulouse-jug-2001-09-14

7777

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

Page 78: Java se-7-evolves-toulouse-jug-2001-09-14

7878

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/

Page 79: Java se-7-evolves-toulouse-jug-2001-09-14

7979

Page 80: Java se-7-evolves-toulouse-jug-2001-09-14