+ All Categories
Home > Documents > Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection...

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection...

Date post: 31-Mar-2015
Category:
Upload: loren-wenman
View: 219 times
Download: 3 times
Share this document with a friend
Popular Tags:
74
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1
Transcript
Page 1: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 131

Page 2: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 132

55 New Things in Java 7

64

Insert Presenter’s Name HereInsert Presenter’s Title Here

Page 3: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 133

55 New Things in Java 7Insert Presenter’s Name HereInsert Presenter’s Title Here

Presenting with THIRD PARTY COMPANY LOGO

ORACLEPRODUCT

LOGO

64

Page 4: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 134

The 64 New Java 7 Features

• 64 minutes – 64 slides• Ignite Format

• No stopping!

• No going back!

• The PRD for Java 7 had almost 2,000 changes, here are 64 of the more relevant ones...

(that you probably didn’t hear about)

Page 5: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 135

Binary Literals

int mask = 0b101010101010;aShort = (short)0b1010000101000101;long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;

HAPPY_FACE = { (short)0b0000011111100000; (short)0b0000100000010000; (short)0b0001000000001000; (short)0b0010000000000100; (short)0b0100000000000010; (short)0b1000011001100001; (short)0b1000011001100001; (short)0b1000000000000001; (short)0b1000000000000001; (short)0b1001000000001001; (short)0b1000100000010001; (short)0b0100011111100010; (short)0b0010000000000100; (short)0b0001000000001000; (short)0b0000100000010000; (short)0b0000011111100000; }

Page 6: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 136

Underscores in Number Literals• Valid:

• Invalid:

int mask = 0b1010_1010_1010;long big = 9_223_783_036_967_937L;long creditCardNumber = 1234_5678_9012_3456L;long socialSecurityNumber = 999_99_9999L;float pi = 3.14_15F;long hexBytes = 0xFF_EC_DE_5E;long hexWords = 0xCAFE_BFFE;

float pi1 = 3_.1415F; float pi2 = 3._1415F;long ssn = 999_99_9999_L;int x1 = _52; int x1 = 52_;int x2 = 0_x52; int x2 = 0x_52;

Page 7: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 137

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

Did you know it produces generally more efficient byte codes than an if-then-else statement? Case Sensitive!

Page 8: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 138

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

• New superinterface java.lang.AutoCloseable• All AutoCloseable (throws Exception) and by extension

java.io.Closeable (throws IOException) types useable with try-with-resources

• Anything with a void close() method is a candidate

• JDBC 4.1 retrofitted as AutoCloseable too

Page 9: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 139

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

Throwable.getSupressed(); // Returns Throwable[]

Throwable.addSupressed(aThrowable);

Page 10: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1310

Multi-Catch

try {...

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

NoSuchMethodException |InvocationTargetException e) {

// Useful if you do generic actions log(e);

throw e;}

Page 11: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1311

More Precise Rethrow public void foo(String bar) throws FirstException, SecondException { try { // Code that may throw both

// FirstException and SecondException } catch (Exception e) { throw e; } }

• Prior to Java 7, this code would not compile, the types in throws would have to match the types in catch – foo would have to “throws Exception”

• Java 7 adds support for this as long as try block calls all the exceptions in the throws clause, that the variable in the catch clause is the variable that is rethrown and the exceptions are not caught by another catch block.

Page 12: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1312

Diamond Operator Works Many Ways...

• With diamond (<>) compiler infers type

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

OR

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

OR

Foo<Bar> foo = new Foo<>();foo.mergeFoo(new Foo<>());

Page 13: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1313

Varangs Warnings - Erasureclass 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

@SuppressWarnings(value = “unchecked”) // at call@SafeVarargs // at declaration

Page 14: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1314

Why We Needed NIO2

• Methods didn’t throw exceptions when failing• Rename worked inconsistently • No symbolic link support• Additional support for meta data• Inefficient file meta data access• File methods didn’t scale• Walking a tree with symbolic links not possible

Page 15: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1315

Java NIO.2 Features – Helper Types• Four key new helper Types new in Java 7• Class java.nio.file.Paths

• Exclusively static methods to return a Path by converting a string or Uniform Resource Identifier (URI)

• Interface java.nio.file.Path• Used for objects that represent the location of a file in a file system, typically

system dependent

• Class java.nio.file.Files• Exclusively static methods to operate on files, directories and other types of

files

• Class java.nio.file.FileSystem• Typical use case:

• Use Paths to get a Path. Use Files to do stuff.

Page 16: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1316

Java NIO.2 Example of Helpers in Action• 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 17: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1317

Java NIO.2 Features – Files Class

• Files helper class is feature rich:• Copy

• Create Directories

• Create Files

• Create Links

• Use of system “temp” directory

• Delete

• Attributes – Modified/Owner/Permissions/Size, etc.

• Read/Write

Page 18: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1318

Java NIO.2 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 19: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1319

Java NIO.2 Symbolic Links• Path and Files are “link aware”• createSymbolicLink(Path, Path, FileAttribute<?>)

Path newLink = Paths.get(. . .);Path existingFile = Paths.get(. . .);try { Files.createSymbolicLink(newLink, existingFile);} catch (IOException x) { System.err.println(x);} catch (UnsupportedOperationException x) { //Some file systems or some configurations

//may not support links System.err.println(x);}

Page 20: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1320

Java NIO.2 More on Symbolic Links• Hard Links• Detect a Symbolic Link• Find the Target of the Link

try { Files.createLink(newLink, existingFile);} catch (IOException | UnsupportedOperationException x) { System.err.println(x);}

boolean isSymbolicLink = Files.isSymbolicLink(file);

Path link = ...;Files.readSymbolicLink(link));

Page 21: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1321

Java NIO.2 Walking A File Tree

• A FileVisitor interface makes walking a file tree for search, or performing actions, trivial.

• SimpleFileVisitor implements

preVisitDirectory(T dir, BasicFileAttributes attrs);visitFile(T dir, BasicFileAttributes attrs);visitFileFailed(T dir, IOException exc);postVisitDirectory(T dir, IOException exc);

SAMPLE:Path startingDir = ...;PrintFiles pf = new PrintFiles(); // SimpleFileVisitor sub

// visitFile(Path p, BasicFileAttributes bfa) {// System.out.println(file.getFileName());}

Files.walkFileTree(startingDir, pf);

Page 22: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1322

Java NIO.2 Watching a Directory• Create a WatchService “watcher” for the filesystem• Register a directory with the watcher• “Watcher” can be polled or waited on for events

• Events raised in the form of Keys

• Retrieve the Key from the Watcher

• Key has filename and events within it for create/delete/modify

• Ability to detect event overflows

Page 23: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1323

NIO.2 Custom FileSystems

• FileSystems class is factory to great FileSystem (interface)

• Java 7 allows for developing custom FileSystems, for example:• Memory based or zip file based systems

• Fault tolerant distributed file systems

• Replacing or supplementing the default file system provider

• Two steps:• Implement java.nio.file.spi.FileSystemProvider 

• URI, Caching, File Handling, etc.

• Implement java.nio.file.FileSystem

• Roots, RW access, file store, etc.

Page 24: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1324

NIO.2 Filesystem Provider for zip/jar Archives

A fully-functional and supported NIO.2 filesystem provider for zip and jar files

Map<String, String> env = new HashMap<>();

env.put("create", "true");

// locate file system by using the syntax

// defined in java.net.JarURLConnection

URI u= URI.create("jar:file:/foo/zipfs/zipfstest.zip");

try (FileSystem z = FileSystems.newFileSystem(u, env)) {

Path externalTxtFile = Paths.get("/foo/zipfs/Sample.txt");

Path pathInZipfile = z.getPath("/Sample.txt");

// copy a file into the zip file

externalTxtFile.copyTo(pathInZipfile);

}

Page 25: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1325

Mapping java.io.File to java.nio.file

• java.io.File

• File.canRead, canWrite, canExecute

• File.isDirectory(), File.isFile(), and File.length()

• File.lastModified() and File.setLastModified(long)

• File methods: setExecutable, setReadable, setReadOnly, setWritable

• new File(parent, "newfile")

• java.nio.file.Path

• Files.isReadable, Files.isWritable, and Files.isExecutable.

• Files.isDirectory(Path, LinkOption...), Files.isRegularFile(Path, LinkOption...), and Files.size(Path)

• Files.getLastModifiedTime(Path, LinkOption...) and Files.setLastModifiedTime(Path, FileTime)

• Files methods: setAttribute(Path, String, Object, LinkOption...).

• parent.resolve("newfile")

Page 26: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1326

Mapping java.io.File to java.nio.fileContinued

• File.renameTo

• File.delete

• File.createNewFile

• File.deleteOnExit

• File.exists

• File.compareTo and equals

• File.getAbsolutePath and getAbsoluteFile

• File.getCanonicalPath and getCanonicalFile

• File.isHidden

• File.mkdir and mkdirs

• File.listRoots

• Files.move

• Files.delete

• Files.createFile

• DELETE_ON_CLOSE option in createFile

• Files.exists and Files.notExists

• Path.compareTo and equals

• Path.toAbsolutePath

• Path.toRealPath or normalize

• Files.isHidden

• Path.createDirectory

• FileSystem.getRootDirectories

Page 27: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1327

More Information on NIO2

• OpenJDK: NIO project website on java.net• Includes resources for:

• Multicasting

• Asynchronous I/O

• Creating your own file system implementation

• File I/O Tutorial• Java Spotlight Podcast Episode 59

Page 28: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1328

Java Concurrency History

• Java designed to support concurrent programming

• JSR 166

• Initial version for high-level concurrency in Java 5.0

• Extended in Java SE 6 with update JSR 166x

• Further extended in Java SE 7 with update JSR166y

• Fork-join framework introduced in Java SE 7

Page 29: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1329

Concurrency APIs JSR 166y - Phasers

• Phaser• Barrier similar to CyclicBarrier and CountDownLatch• Used for many threads to wait at common barrier point

• For example, use this to create N threads that you want to do something simultaneously – “start gun” metaphor

• How is Phaser an improvement?• Dynamic add/remove “parties” to be sync’d

• Better deadlock avoidance

• Arrival “counting” and phase advance options, etc

• Termination api’s

• Tiering (tree structure)

• Rather than sync 100 threads, sync 2x50 then 2x

Page 30: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1330

Concurrency APIs JSR 166y - TransferQueue

• TransferQueue interface• Extension to BlockingQueue• Implemented by LinkedTransferQueue• Additional Benefits:

• Adds methods:

• transfer(E e), tryTransfer(E e), tryTransfer(E e, long timeout), hadWaitingConsumer(), getWaitingConsumerCount()

• Allows for smarter queues to be built – sidestep the data structure if it’s known there are consumers waiting

Page 31: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1331

Fork Join Framework JSR 166y – Pools

• ForkJoinPool– Service for running ForkJoinTasks

– aFjp.execute(aTask); // async

– aFjp.invoke(aTask); // wait

– aFjp.submit(aTask); // async + future

– ForkJoinPool(); // default to platform

– ForkJoinPool(int n); // # concurrent threads

– ForkJoinPool(n,aThreadFactory,exHandler,FIFOtasks); // Create your own thread handler, exception handler, and boolean on task ordering (default LIFO)

Page 32: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1332

Fork Join Framework – JSR 166y - Tasks• ForkJoinTask

– The abstract base class for:

• RecursiveAction

– A recursive resultless task

– Implements compute() abstract method to perform calculation

• RecursiveTask

– Similar to RecursiveAction but returns a result

ForkJoinPool p = new ForkJoinPool(); MyTask mt = new MyTask(n); // implements compute p.submit(mt);while (!mt.isDone()) {/*THUMPER!*/ }System.out.println(mt.get());

Page 33: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1333

Fork Join Framework – JSR 166y – compute ()

• RecursiveAction example to increment an entire arrayprotected void compute() { if (hi - lo < THRESHOLD) { for (int i = lo; i < hi; ++i) array[i]++; } else { int mid = (lo + hi) >>> 1; invokeAll(new IncrementTask(array, lo, mid), new IncrementTask(array, mid, hi));}

• RecursiveTask example for Fibonacci numbersprotected Integer compute() {

if (n <= 1) return n; Fibonacci f1 = new Fibonacci(n - 1); Fibonacci f2 = new Fibonacci(n - 2);

f1.fork(); f1.fork(); return f2.join() + f1.join();}

Page 34: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1334

Concurrent Random Numbers – JSR 166y

• Existing RNG becomes unwitting source of contention between threads in concurrent apps

• Expected more needs of concurrent RNG with advent of Fork Join Framework

• Class java.util.ThreadLocalRandom•  ThreadLocalRandom.current().nextDouble(…)

•  ThreadLocalRandom.current().nextInt (…)

•  ThreadLocalRandom.current().nextLong(…)

Page 35: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1335

JSR 166y – ConcurrentLinkedDeque Class

• Unbound concurrent deque based on linked nodes

• Like a Queue, but allows front and rear removal of elements

• Concurrent insert, remove and access on multiple threads

• Iterators are weakly consistent

Page 36: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1336

More Information on Concurrency• Concurrency JSR-166 Interest Site

• JSR166 maintenance updates• Package jsr166e

• Package jsr166y

• Package extra166y

• Package jsr166x

• http://gee.cs.oswego.edu/dl/papers/fj.pdf

• Concurrency Tutorial

• Books• Concurrent Programming in Java: Design Principles and Pattern (2nd Edition) by

Doug Lea

• Java Concurrency in Practice by Brian Goetz, Doug Lea and others

Page 37: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1337

ClassLoader Improvements – Deadlock AvoidanceClass Hierarchy:

class A extends B ; class C extends D ;

Custom Classloader CL1:

directly loads class A

delegates to custom ClassLoader CL2 for class B

Custom Classloader CL2:

directly loads class C

delegates to custom ClassLoader CL1 for class D

Thread 1:

Use CL1 to load class A (locks CL1)

defineClass A triggers loadClass B (try to lock CL2)

Thread 2:

Use CL2 to load class C (locks CL2)

defineClass C triggers loadClass D (try to lock CL1)

ClassLoaders were “not sufficiently granular”

and prone to deadlock

Java 7 has a “parallel capable classloader”

(in SE 7 – lock CL1+A)

(in SE7 – lock CL2+B)

(in SE 7 – lock CL2+C)

(in SE7 – lock CL1+D)

Page 38: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1338

URLClassLoader Improvements – close ()// create a class loader loading from "foo.jar"

URL url = new URL("file:foo.jar");

URLClassLoader loader = new URLClassLoader (new URL[] {url});

Class cl = Class.forName ("Foo", true, loader);

Runnable foo = (Runnable) cl.newInstance();

foo.run();

loader.close ();

// foo.jar gets updated somehow

loader = new URLClassLoader (new URL[] {url});

cl = Class.forName ("Foo", true, loader);

foo = (Runnable) cl.newInstance();

// run the new implementation of Foo

foo.run();

Page 39: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1339

Unicode 4 Unicode 6.0• Unicode standard was originally 16 bit

• 16 bits not sufficient for Unicode 6, but backward compatibility needs to be maintained

• Use String “U+hex” to express char in Unicode

• Unicode 6.0 adds thousands of new characters

• Support for properties and data files (mostly interesting to Japanese Telcos and Indic scripts)

• Full Unicode 6.0 REGEX support!

Page 40: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1340

Extensible Currency Codes (ISO 4217)

• ISO 4217 Defines Currency Codes

• Possible to supersede default currencies with

<JAVA_HOME>/lib/currency.properties file

• Allows for supporting global changes without updating Java

• Format: ISO 3166 Country code = ISO 4217 Codes

# Sample currency property if Canada adopts USD

# CA=CAD,124,2 is default ISO 4217 code

CA=USD,840,2

Page 41: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1341

Number Shaper Enhancements• NumericShaper used to map numbers to non Latin char sets (since 1.4)

• NumericShaper traditionally used an int bitmask for defaults• Fine when there were only 19 defaults

• In Java 7 there are 34 (> 32 bits!!)

• Java 7 now has an Enum NumericShaper.Range• Backward compatibility maintained, new API’s added for Enum use

where desired

Page 42: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1342

Locale Enhancement – Categories

• Default Locale can be set independently for format resources (dates, numbers, currencies) and display resources (menus and dialogs)

• For example, an application for Japanese speakers who deal with US financial transactions may:

//Enum Locale.Category – DISPLAY and FORMAT

//Default no arg get/set is DISPLAY

Locale.setDefault(DISPLAY, Locale.JAPAN);

Locale.setDefault(FORMAT, Locale.US);

Page 43: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1343

Locale Enhancement – BCP 47 ExtensionsJava 7 confirms to IETF BCP 47 (refs UTS #35)• Specify extensions to a Locale (get/set)

• i.e., de-DE-co-phonebk

• No guarantee the underlying platform can honour extension

Key Description Example Example Description

ca calendar algorithm ca-buddhist Thai Buddhist calendar

co collation type co-pinyin Pinyin ordering for Latin

k* collation parameters kf-upper Donald before donald

cu currency type cu-usd U.S. dollars

nu number type nu-jpanfin Japanese financial numerals

tz timezone tz-aldav Europe/Andorra

va common variant type va-posix POSIX style locale variant

Page 44: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1344

Nimbus Look & Feel

• Better than Metal for cross platform look-and-feel• Introduced in Java SE 6u10, now part of Swing• Not the default L&F• Scalable Java 2D impl

Page 45: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1345

Setting Nimbus Look & Feel(Continued)

• Through Codetry { for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } }• Command Linejava -Dswing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel MyApp• Swing Propertiesswing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel

Page 46: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1346

JLayer ComponentEasy Enrichment for Swing Components

// 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 47: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1347

Mixing of AWT and Swing – Works*

• As of 6u12 and 7u1, some caveats

Page 48: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1348

Translucent Windows• Private API added in 6u10, made public in Java 7

• Support (based on platform) for:• Uniform Translucency

• Per Pixel Translucency

• Per Pixel Transparency

// simple uniform:aWindow.setOpacity(0.5f);

// Per pixel g2d is the g2d of a JPanel on paintComponent(g)Paint p = new GradientPaint(0.0f, 0.0f, new Color(R, G, B,0), 0.0f, getHeight(), new Color(R, G, B, 255), true);g2d.setPaint(p);g2d.fillRect(0, 0, getWidth(), getHeight());

Page 49: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1349

Xrender-based Java 2D for Modern X11

• Improved Graphics Performance• Off by default (backward compatibility)

• Quiet:

-Dsun.java2d.xrender=true

• Verbose (log on stdout if successful or not)

-Dsun.java2d.xrender=True

Page 50: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1350

OpenType/CFF Fonts

• Java Platform must support TrueType fonts, other font technologies is implementation dependent

• Java 7 adds support for “Compact Font Format” - OpenType/CFF

Page 51: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1351

Better Support for Linux Fonts

• Five logical fonts since Java 1.0:• Serif, Sans-serif, Monospaced, Dialog, and

DialogInput

• Must map to physical font on your system

• No consistency in fonts in Linux• Required editing fontconfig.properties• Java 7 on Linux (and Solaris 11) uses system “libfontconfig”, reflecting what Gnome/KDE desktop applications use

Page 52: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1352

HSV/HSL/CMYK Tabs in JColorChooser

Page 53: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1353

More Information on GUI• Nimbus Look & Feel Tutorial

• http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/nimbus.html

• How to Decorate Components with the JLayer Class• http://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html

• Mixing Heavyweight and Lightweight Components• http://java.sun.com/developer/technicalArticles/GUI/mixing_components/

• How to Create Translucent and Shaped Windows• http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.htm

l

• How to use Color Chooser• http://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html

Page 54: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1354

JDBC 4.1• Try-with-resources statement to automatically close resources of

type Connection, ResultSet, and Statement

try (Statement stmt = con.createStatement()) { // ... }

• RowSet 1.1 introduces RowSetFactory and RowSetProvider

//Factory options (impl) set on cmd line or metainf

myRowSetFactory = RowSetProvider.newFactory();

jdbcRs = myRowSetFactory.createJdbcRowSet();

jdbcRs.setUrl("jdbc:myDriver:myAttribute"); //etc

jdbcRs.setCommand("select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES");

jdbcRs.execute();

Page 55: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1355

Java DB Enhancements (Derby)

• JDK 7 includes Java DB 10.8.1.2• New Since JDK 6

• BOOLEAN data type

• Table truncation

• Query plan browsing• Automatic calc of index stats

• Unicode database names

• Improved interrupt handling• Can now interrupt connection threads

• MAX optimization (faster!)

• XML operator portability

Page 56: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1356

Embedding JNLP File in Applet Tag

• Saves a network round trip first time applet is loaded

• Base64 Encode the JNLP contents into a Javascript call:

<script src="http://www.java.com/js/deployJava.js"></script>

<script>

var attributes = {} ;

<!-- Base64 encoded string trunc’d below for readability --> var parameters = {jnlp_href: 'dynamictree-applet.jnlp', jnlp_embedded: 'PCEtLSAKLyoKICogQ29weX ... HA+Cg==' } ; deployJava.runApplet(attributes, parameters, '1.7');

</script>

Page 57: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1357

Ability to Detect Applet init Status on Load<script>

function registerAppletStateHandler() {

switch (drawApplet.status) {

case 1: <!–- applet is loading -->

drawApplet.onLoad = onLoadHandler;

case 2: <!–- applet is loaded -->

case 3: <!–- error -->

document.getElementById("mydiv")

.innerHTML =“No need to onload";

}

}

<!–- assume java.com/js/deployJava.js is loaded ->var parameters = {java_status_events: 'true'};<!–- set other params like jnlp->deployJava.runApplet(attributes, parameters, '1.7');...</script>

function onLoadHandler(){

document.

getElementById("mydiv“)

.innerHTML =

"Applet has loaded";

draw();

}

Page 58: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1358

Draggable Applet Decoration

• Applet decoration settings apply equally to in browser and out of browser launches – borderless, etc.

Page 59: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1359

Other Miscellaneous New JNLP Stuff

• Partially signed JNLP• Simplifies build and deployment in some scenarios

• External JNLP file may differ from one embedded in jar

• Targeting resources to particular version of OS

<resources os="Windows\ Vista Windows\ 7">

<jar href=“legacySound.jar"/> </resources>

• Better “install” preferences of an application• For example, attribute to determine if app appears on “Add or Remove

Programs panel”

Page 60: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1360

VM: Updates to Experimental GC – G1

• Garbage First - “G1” intended to replace* Concurrent Mark-Sweep (CMS) in Hotspot at some future release

• G1 is included for experimentation in Java 7

• Key benefits:• More predictably “soft real-time” – temporal configuration

• High throughput

• Basics:• Heap partitioned into equal-sized heap regions

• Compacts as it proceeds – looks for regions with no live objects for immediate reclamation

http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html

Page 61: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1361

VM: Tiered Compilation• Hotspot has 2 JIT’s “client” and “server”

• Client starts fast, but let optimizations – best for clients

• Server starts slower, but provides better optimizations

• Java 7 adds Tiered Compilation• JIT the code first with “client”, and if it’s really hot code,

recompile with “server”

• Has been around for a while, but not with a great implementation

-server -XX:+TieredCompilation

Image from Rémi Forax showing the

DaCapo Jython benchmark.

http://www.java.net/blogs/forax

Page 62: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1362

VM: Compressed OOPS by Default

• Going from 32bit to 64bit system will grow the heap by ~1.5x simply because of bigger ordinary object pointers

• Memory is cheap, but bandwidth and cache is not• Compressed OOPS:

• Managed 32 bit pointers (similar heap sizes for 32/64 bit apps)

• Scaled (8 x 4GB chunks) added to a 64 bit base

• Useful for heaps up to 32GB• Compressed OOPS will turn off when –Xmx > 32g

Page 63: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1363

VM: invokedynamic Illustratedthis[method_name](x, y)

invokedynamic [#bootstrapMethod] .this_method_name

class LanguageRuntime {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: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1364

Java XML Technology Enhancements

• JAXP 1.4.5• Bug fixes and performance improvements

• JAX-WS 2.2.4• Bug fixes and performance improvements

• JAXB 2.2.3• Bug fixes and performance improvements

Page 65: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1365

Elliptical Curve Cryptography (ECC)

• New Native Provider added to JDK 7• ECC-based algorithms (ECDSA/ECDH)• Enables ECC based Java Secure Sockets Extension (JSSE)• Compared to traditional crypto systems like RSA, ECC offers equivalent security:

• With smaller key sizes

• Faster computations

• Lower power consumption

• Memory and bandwidth savings

Page 66: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1366

Transport Layer Security (TLS) Updates

• Support for TLS 1.1• Protection against cipher block chaining attacks

• Support for TLS 1.2

• TLS Renegotiation

• CertPath and TLS algorithm disabling• Can deny specific algorithms in path processing and handshaking, i.e., MD2

Page 67: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1367

JavaDoc Improvements in Java 7

• Section 508 accessibility guidelines• Captions, headings, etc.

• Previously, JavaDoc wrote to an OutputStream on the fly meaning it built the document sequentially, imposing limitations

• Now uses internal “HTMLTree” classes• Generates compliant HTML

• Allows for more advancements in the future

• Removes limitation of only being able to execute only once in any VM• Was fine when used as a command line tool

• Continuous build, etc, made it necessary to address this!

Page 68: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1368

CSS for JavaDoc – stylesheet.css

Page 69: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1369

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.

Page 70: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1370

Page 71: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1371Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 16

ProgramAgenda

Topic 1, Arial, 24pt

Topic 2, Arial, 24pt

Topic 3, Arial, 24pt

Topic 4, Arial, 24pt

Topic 5, Arial, 24pt

Topic 6, Arial, 24pt

Page 72: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1372

Page 73: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1373

Classic Duke

Page 74: Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1.

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1374


Recommended