0% found this document useful (0 votes)
33 views

Cool in Java 8, and New in Java 9 PDF

Uploaded by

tpillai
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
33 views

Cool in Java 8, and New in Java 9 PDF

Uploaded by

tpillai
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 78

What

is cool in Java 8 and new in 9

Aurelio Garcia-Ribeyro
Director of Product Management
Java Platform Group
March 2017

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Safe Harbor Statement
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 Oracles products remains at the sole discretion of Oracle.

Copyright 2017, Oracle and/or its affiliates. All rights reserved. 3


Introduction
Aurelio Garcia-Ribeyro
Director Product Management, Java Platform Group, Oracle
In charge of managing the product requirements for Oracles JDK since joining Oracle
through the Sun acquisition in 2010
Before joining Oracle, worked at Sun Microsystems for the Java Product Management
team
MBA from MIT Sloan and Bachelor degree in Systems Engineering from Universidad
de Lima

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Java 8
One of the biggest updates
ever to a major language
Andrew Binstock
Former Editor in Chief, Dr.Dobbs , now with Java Magazine

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Abridged Content List for JDK 8

Lambda Expressions
Default Methods
Method References
Date Time APIs - JSR 310

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Abstracting over Behavior
Collection<Person> people = ...;

for (Person p : people){


if (p.getAge() > 18)
?? How do we remove this person ???
}

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Abstracting over Behavior
Collection<Person> people = ...;

Iterator<Person> it = people.iterator();
while (it.hasNext()) {
Person p = it.next();
if (p.getAge() > 18)
it.remove();
}

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


The API Designer
Abstracting over Behavior Could create methods in the
collection
interface Predicate<T> {
boolean test(T t);
}

class Collections {
public static<T>
void removeIf(Collection<T> coll,
Predicate<T> pred) {
...
}
}

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


But the code to use the new
Abstracting over Behavior method would be bloated

Collection<Person> people = ...;

Collections.removeIf(people,
new Predicate<Person>() {
public boolean test(Person p) {
return p.getAge() > 18;
}
}
});

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Abstracting over Behavior
Collection<Person> people = ...;

Collections.removeIf(people,
new Predicate<Person>() {
public boolean test(Person p) {
return p.getAge() > 18;
}
}
});

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Abstracting over Behavior
Collection<Person> people = ...;

Collections.removeIf(people,
p -> p.getAge() > 18);

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Aggregate operations
Collection<Person> people = ...;

int highestWeight = 0;
for (Person p : people) {
if (p.getGender() == MALE) {
int weight = p.getWeight();
highestWeight = max(highestWeight,weight);
}
}

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Parallelism
Collection<Person> people = ...;

int highestWeight =
people.stream()
.filter(p -> p.getGender() == MALE)
.mapToInt(p -> p.getWeight())
.max();

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Parallelism class MaxFinder extends RecursiveAction {

private final MaxProblem problem;


int max;

protected void compute() {


class MaxProblem { if (problem.size < THRESHOLD)
sum = problem.solveSequentially();
final List<Person> people; else {
final int size; int m = problem.size / 2;
MaxFinder left, right;
MaxProblem(List<Person> ps) { left = new MaxFinder(problem.subproblem(0, m))
this.people = ps; right = new MaxFinder(problem.subproblem(m, problem.size));
size = ps.size(); forkJoin(left, right);
} max = Math.max(left.max, right.max);
}
public int solveSequentially() { }
int max = 0;
for (Person p : people) { }
if (p.getGender() == MALE)
max = Math.max(max, p.getWeight()); ForkJoinExecutor pool = new ForkJoinPool(nThreads);
} MaxFinder finder = new MaxFinder(problem);
return max; pool.invoke(finder);
}

public MaxProblem subproblem(int start, int end) {


return new MaxProblem(people.subList(start, end));
}

}
Copyright 2017, Oracle and/or its affiliates. All rights reserved.
Parallelism
Collection<Person> people = ...;

int highestWeight =
people.stream()
people.parallelStream()
.filter(p -> p.getGender() == MALE)
.mapToInt(p -> p.getWeight())
.max();

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Abridged Content List

Lambda Expressions
Default Methods
Method References
Date Time APIs - JSR 310

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Default methods
Collection<Person> people = ...;

int highestWeight =
people.stream()
...

interface Collection<T> {
...
default Stream<T> stream() {
...
}
}

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Static Methods In Interfaces

Previously it was not possible to include static methods in an interface


Static methods, by definition, are not abstract
@FunctionalInterface can have zero or more static methods

static <T> Predicate<T> isEqual(Object target) {


return (null == target)
? Objects::isNull
: object -> target.equals(object);
}

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Method References

list.replaceAll(s -> s.toUpperCase());


list.replaceAll(String::toUpperCase);

list.sort(Comparator.comparing(p -> p.getName()));


list.sort(Comparator.comparing(Person::getName));

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Summary

Lambdas are functions


Java SE 8 defines new APIs using functional interfaces
Default methods
Method references

Lambdas make code read more like the problem statement. The resulting
code is clear, concise, and easy to maintain and modify.

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Tools for Java SE 8
Lambda Expressions

Quickly convert
anonymous
inner
classes
to lambdas

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Tools for Java SE 8
Method References

Easily convert
from lambdas
to method references

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Tools for Java SE 8
Refactoring in Batch Mode

Specify a scope
for upgrading to Java 8
All/current projects
Specific package
Specific class
Run converters
Visually preview
proposals for
refactoring

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Abridged Content List

Lambda Expressions
Default Methods
Method References
Date Time APIs - JSR 310

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JDK 8 Java Time Features JSR 310
New Improved Date Time API

Replaces java.util.Date, Calendar, TimeZone, DateFormat


Fluent, Immutable, Thread Safe, Easy to use
Strong typing with fit for purpose types
Easy to use formatting and parsing
Interoperable with java.util.Calendar/Date
Extensible Units, Fields, and Chronologies
Supports Regional Calendars
Supported by JDBC, java.sql.Date/Time/Timestamp
The essential ISO 8601 Calendar for global business

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Range of types
l Date consists of year, month and day
l Time-of-day consists of hour, minute, second
- LocalDate - a date with no time and no time-zone
- LocalTime - a time with no date and no time-zone
In JDK 8, you have to choose
- LocalDateTime - combines LocalDate and LocalTime
the correct date/time type
l Time-zones handled separately
when designing an application!
- ZonedDateTime - closest class to java.util.Calendar
l Instantaneous points in time
- Instant - closest class to java.util.Date

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Local Date
l Stores year-month-day
- 12th March 2017
l Use cases: birthdays, start/end dates, holiday dates

LocalDate current = LocalDate.now();


LocalDate date = LocalDate.of(2013,Month.SEPTEMBER,12);
if (current.isAfter(date))

String str = date.toString(); // 2013-09-12

boolean leap = date.isLeapYear();


int monthLen = date.lengthOfMonth();

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Local Time
l Stores hour-minute-second-nanosecond
- 13:30 (1:30pm)
l Use cases: shop opening hours, alarm clock

LocalTime current = LocalTime.now();


LocalTime time = LocalTime.of(13,30);
if (current.isAfter(time))

String str = time.toString(); // 13:30

time = time.plusHours(4).minusMinutes(1).withNano(0);
time = time.truncatedTo(ChronoUnit.SECONDS);

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Local Date-Time
l Stores LocalDate and LocalTime
- 12th September 2013 at 13:30
l Use case: local date-time a flight takes off

dt1 = LocalDateTime.now();
dt2 = LocalDateTime.of(2013,SEPTEMBER,12, 13,30);

dt1 = dt1.plusDays(2).minusHours(1);
dt1 = dt1.with(next(TUESDAY));

dt2.toString(); // 2013-09-12T13:30

dt2 = dt2.truncatedTo(MINUTES);

Copyright 2017, Oracle and/or its affiliates. All rights reserved. http://www.flickr.com/photos/estevesm/473866656/
Instant
l Stores nanoseconds from 1970-01-01Z
l Closest equivalent to java.util.Date
l Use case: timestamp in logging

instant1 = Instant.now();
instant2 = Instant.now();

if (instant1.isAfter(instant2)) { }

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Time zones
l World is divided into various time zones
l Time in a location defined by political rules
l Rules change frequently and in complex ways

If you can avoid time-zones


your application will be simpler!

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Time zone design
l Four classes manage time-zone complexity

l ZoneId - "Europe/Paris", as per java.util.TimeZone


l ZoneOffset - "-05:00", offset from UTC/Greenwich
l ZoneRules - behind the scenes class defining the rules
l ZonedDateTime - main date/time class with time-zones

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Calendar systems
l All main classes use "ISO" calendar system
l Calendar system defined in ISO-8601
- current 'civil' calendar applied to all time
- not historically accurate

l Other calendar systems also supported


- not supported to the same degree as ISO
- Hijrah, Japanese, Minguo, ThaiBuddhist in the JDK

l Only affect dates, not times

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Duration
l Time-based amount
- hours, minutes, seconds and nanoseconds
- some support for 24-hour days
l Use cases: sport stopwatch, timeout

duration = Duration.ofHours(6); // PT6H


duration = duration.multipliedBy(3); // PT18H
duration = duration.plusMinutes(30); // PT18H30M

dt = LocalDateTime.now();
dt = dt.plus(duration);

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Period
l Date-based amount
- years, months and days
l Use cases: length of pregnancy, length of holiday

period = Period.ofMonths(9); // P9M


period = period.plusDays(6); // P9M6D

dt = LocalDateTime.now();
dt = dt.plus(period);

period = Period.between(startDate, endDate);

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Summary
l LocalDate 2016-12-03
l LocalTime 11:05:30
l LocalDateTime 2016-12-03T11:05:30

l ZonedDateTime 2016-12-03T11:05:30+01:00 Europe/Paris

l Instant 2576458258.266 seconds after 1970-01-01

l Duration PT30S (30 seconds)


l Period P1Y6M (1 year and 6 months)

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JDK 8
Innovation Java for Everyone Tools
Lambda aka Closures Profiles for constrained devices JSR 308-Annotations on Java Type
Language Interop JSR 310-Date & Time APIs Native app bundling
Nashorn Non-Gregorian calendars App Store Bundling tools
Unicode 6.2 jdeps
Core Libraries ResourceBundle
Parallel operations for core BCP47 locale matching General Goodness
collections APIs Globalization & Accessibility JVM enhancements
Improvements in functionality No PermGen limitations
Performance improvements
Improved type inference
Client
Deployment enhancements
Security Enterprise
JavaFX 8
Limited doPrivilege Mission Control
Public UI Control API
NSA Suite B algorithm support Flight Recorder
Java SE Embedded support
SNI Server Side support Usage Tracker
Enhanced HTML5 support
DSA updated to FIPS186-3 Advanced Management Console
3D shapes and attributes
AEAD JSSE CipherSuites MSI Enterprise JRE Installer
Printing

Copyright 2017, Oracle and/or its affiliates. All rights reserved. 38


Search for:
Java 8 Launch
Where did most of this information come from
Java 8 Launch Event

Java SE 8Language and Library Features, Brian Goetz


Introduction to Lambda Expressions, Stuart Marks
A New Date and Time APIJSR-310, Stephen Colebourne

https://www.oracle.com/java8launch
Copyright 2017, Oracle and/or its affiliates. All rights reserved.
Coming in JDK 9

Copyright 2017, Oracle and/or its affiliates. All rights reserved. 40


Search for:
OpenJDK 9
Agenda

Behind the scenes improvements


New features and functionality
Adopting new standards
Housekeeping
Gone, gone, gone!

More information on any JEP: http://openjdk.java.net/jeps/{JEP#}


Copyright 2017, Oracle and/or its affiliates. All rights reserved.
Behind the scenes improvements
Goodness you get for free just by updating to JDK 9
No need for user to change anything to benefit from these

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 250: Store Interned Strings in CDS Archives
hotspot/runtime

Store interned strings in class-data sharing (CDS) archives

Reduce memory consumption by sharing the String objects and underlying


char array objects amongst different JVM processes
Only support shared strings for the G1 GC. Shared strings require a pinned
region, and G1 is the only HotSpot GC that supports pinning
Only support 64-bit platforms with compressed object and class pointers

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 254: Compact Strings
core-libs/java.lang

Adopt a more space-efficient internal representation for strings

Less memory used for storing strings


String class stores characters in a char array, using two bytes (sixteen bits)
for each character
Change the internal representation of the String class to a byte array plus
an encoding-flag field

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 225: Javadoc Search
tools/javadoc(tool)

Add a search box to


generated API documentation
that can be used to search for
program elements and tagged
words and phrases within the
documentation

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


New features and functionality
New tools and capabilities likely to be useful to most developers
Will have to choose to use these

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Project Jigsaw
Modularize the Java Platform

JEP 261: Module System


JEP 200: The Modular JDK
JEP 201: Modular Source Code
JEP 220: Modular Run-Time Images
Plus
JEP 260: Encapsulate Most Internal APIs
JEP 282: jlink: The Java Linker

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 282: jlink: The Java Linker
tools/jlink

Create a tool that can assemble and optimize a set of modules and their
dependencies into a custom run-time image as defined in JEP 220. Define a
plugin mechanism for transformation and optimization during the assembly
process, and for the generation of alternative image formats
Create a custom runtime optimized for a single program
JEP 261 defines link time as an optional phase between the phases of
compile time and run time. Link time requires a linking tool that will
assemble and optimize a set of modules and their transitive dependencies
to create a run-time image or executable

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 277: Enhanced Deprecation
core-libs/java.lang

@Deprecated(since=9, condemned=true)
Revamp the deprecation annotation, and provide tools to strengthen the
API life cycle
Provide better information about the status and intended disposition of
APIs in the specification
Provide a tool to analyze an application's static usage of deprecated APIs
Provide a tool to detect an application's dynamic usage of of deprecated
APIs in order to emit warnings at runtime

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 269: Convenience Factory Methods for Collections
core-libs/java.util:collections

Define library APIs to make it convenient to create instances of collections


and maps with small numbers of elements, so as to ease the pain of not
having collection literals in the Java programming language

Decrease the amount of code needed for creating small collections and
maps

Set<String> alphabet = Set.of("a", "b", "c");

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 222: jshell: The Java Shell (Read-Eval-Print Loop)
tools/jshell

Provide an interactive tool to evaluate declarations, statements, and


expressions of the Java programming language, together with an API so
that other applications can leverage this functionality
A Read-Eval-Print Loop (REPL) is an interactive programming tool which
loops, continually reading user input, evaluating the input, and printing the
value of the input or a description of the state change the input caused.
Scala, Ruby, JavaScript, Haskell, Clojure, and Python all have REPLs and all
allow small initial programs. JShell adds REPL functionality to the Java
platform

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 238: Multi-Release JAR Files
tools/jar

Extend the JAR file format to allow


multiple, Java-release-specific
versions of class files to coexist in
a single archive

Write JDK-version-specific variants


of the same code into a single jar
file

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Adopting new standards
JDK 9 keeping up with improvements in the industry

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 267: Unicode 8.0
core-libs/java.lang

Upgrade existing platform APIs to support version 8.0 of the Unicode


Standard
Ahom
Anatolian
Hieroglyphs
Hatran
Multani
Old Hungarian
Sutton SignWriting

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 226: UTF-8 Property Files
core-libs/java.util:i18n

Define a means for applications to specify property files encoded in UTF-8,


and extend the ResourceBundle API to load them
The platform has a properties-file format based on ISO-8859-1 and an
escape mechanism for characters that cannot be represented in that
encoding

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 249: OCSP Stapling for TLS
security-libs/javax.net.ssl

Implement OCSP stapling via the TLS Certificate Status Request extension
and the Multiple Certificate Status Request Extension
Certificate status checking using OCSP typically involves a network request
for each certificate being checked. Because of the additional network
requests, enabling OCSP checking for TLS on the client side can have a
significant impact on performance.
OCSP stapling allows the presenter of a certificate, rather than the issuing
Certificate Authority (CA), to bear the resource cost of providing OCSP
responses

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 287: SHA-3 Hash Algorithms
security-libs/java.security

Implement the SHA-3 cryptographic hash functions (BYTE-only) specified in


NIST FIPS 202

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 224: HTML5 Javadoc
tools/javadoc(tool)

Enhance the javadoc tool to allow generating HTML5 markup.

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 110: HTTP/2 Client
core-libs/java.net

Define a new HTTP client API that implements


HTTP/2 and WebSocket, and can replace the
legacy HttpURLConnection API
For JDK 9 this API will be on the incubator
modules (JEP 11) with the goal of adding them to
the standard on a later release.

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Housekeeping
Setting up for future improvements and reducing complexity

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 260: Encapsulate Most Internal APIs

Make most of the JDK's internal APIs inaccessible by default but leave a few
critical, widely-used internal APIs accessible, until supported replacements
exist for all or most of their functionality
In order to keep critical APIs without a replacement accessible by default sun.misc
and sun.reflect will not be hidden and a few APIs kept public
sun.misc.Unsafe
sun.misc.{Signal,SignalHandler}
sun.reflect.Reflection::getCallerClass
sun.reflect.ReflectionFactory
All other APIs in these packages (e.g. sun.misc.Base64) will be removed

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 275: Modular Java Application Packaging
deploy/packager

Integrate features from Project Jigsaw into the Java Packager, including
module awareness and custom runtime creation

Leverage jlink in our packager to create smaller packages

The packager will only create applications that use the JDK 9 runtime.

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 223: New Version-String Scheme

Revise the JDK's version-string scheme so that it is easier to distinguish


major, minor, and security-update releases

Align with current industry practices, in particular Semantic Versioning


Provide a simple API for version-string parsing, validation, and comparison

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 295: Ahead-of-Time Compilation
hotspot/compiler

Compile Java classes to native code prior to launching the virtual machine.
Improve the start-up time of both small and large Java applications, with at
most a limited impact on peak performance.
AOT compilation is done by a new tool, jaotc
For the initial release, the only supported module is java.base.
AOT compilation of any other JDK module, or of user code, is experimental

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 280: Indify String Concatenation
tools/javac

Change the static String-concatenation bytecode sequence generated by


javac to use invokedynamic calls to JDK library functions. This will enable
future optimizations of String concatenation without requiring further
changes to the bytecode emitted by javac

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 271: Unified GC Logging
hotspot/gc

Reimplement GC logging using the unified JVM logging framework


introduced in JEP 158

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 248: Make G1 the Default Garbage Collector
hotspot/gc

Make G1 the default garbage collector on 32- and 64-bit server


configurations

Limiting GC pause times is, in general, more important than maximizing


throughput. Switching to a low-pause collector such as G1 should provide a
better overall experience, for most users, than a throughput-oriented
collector such as the Parallel GC, which is currently the default

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 213: Milling Project Coin
tools/javac

Address the rough edges of the changes included in Project Coin / JSR 334
as part of JDK 7 / Java SE 7

1. Allow @SafeVargs on private instance methods


2. Allow effectively-final variables to be used as resources in the try-with-resources statement
3. Allow diamond with anonymous classes if the argument type of the inferred type is denotable
4. Complete the removal, begun in Java SE 8, of underscore from the set of legal identifier names
5. Support for private interface methods

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 290: Filter Incoming Serialization Data
core-libs/java.io:serialization

Allow incoming streams of object-serialization data to be filtered in order


to improve both security and robustness

Allows developers to lock out some serialized data

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


JEP 214: Remove GC Combinations Deprecated in JDK 8
hotspot/gc
JEP 173 deprecated some GC combinations
with JDK 8.
Unsupported and untested since JDK 8
Incremental CMS (iCMS) removed

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


General Rule: Look Out for Unrecognized VM Options
Launching JRE with unrecognized VM options fails.
Using deprecated options in JDK 8 triggers warning messages:

$ java -XX:MaxPermSize=1G -version


Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize; support was removed in 8.0

Previously deprecated options, removed in JDK 9, will fail to start.


Perm generation was removed in JDK 8 (JEP 122).
Expect many programs to run into this problem.

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Store Interned Strings in CDS Archives Process API Updates Parser API for Nashorn
Improve Contended Locking Variable Handles Prepare JavaFX UI Controls & CSS APIs for
Compact Strings Spin-Wait Hints Modularization
Improve Secure Application Performance Dynamic Linking of Language- Modular Java Application Packaging
Leverage CPU Instructions for GHASH and RSA Defined Object Models New Version-String Scheme
Tiered Attribution for javac Enhanced Method Handles Reserved Stack Areas for Critical Sections
Javadoc Search More Concurrency Updates Segmented Code Cache
Marlin Graphics Renderer Compiler Control Specialized Ahead-of-Time Compilation
HiDPI Graphics on Windows and Linux Indify String Concatenation
Enable GTK 3 on Linux HTTP 2 Client Unified JVM Logging
Update JavaFX/Media to Newer Version of Unicode 8.0 Unified GC Logging
GStreamer UTF-8 Property Files Make G1 the Default Garbage Collector
Behind the scenes Use CLDR Locale Data by Default
Implement Selected ECMAScript 6
Jigsaw Modularize JDK Features in Nashorn Validate JVM Command-Line Flag Arguments
Enhanced Deprecation Datagram Transport Layer Security Java-Level JVM Compiler Interface
Stack-Walking API (DTLS) Disable SHA-1 Certificates
Convenience Factory Methods for Collections OCSP Stapling for TLS Simplified Doclet API
Platform Logging API and Service TLS Application-Layer Protocol Deprecate the Applet API
jshell: The Java Shell (Read-Eval-Print Loop) Negotiation Extension Process Import Statements Correctly
Compile for Older Platform Versions SHA-3 Hash Algorithms Annotations Pipeline 2.0
Multi-Release JAR Files DRBG-Based SecureRandom Elide Deprecation Warnings on Import
Platform-Specific Desktop Features Implementations Statements
TIFF Image I/O\ Milling Project Coin Housekeeping
Create PKCS12 Keystores by Default
Multi-Resolution Images New functionality Merge Selected Xerces 2.11.0 Updates Filter Incoming Serialization Data
into JAXP Remove GC Combinations Deprecated in
XML Catalogs New standards JDK 8
HarfBuzz Font-Layout Engine Remove Launch-Time JRE Version Selection
HTML5 Javadoc Remove the JVM TI hprof Agent Gone
Remove the jhat Tool
Copyright 2017, Oracle and/or its affiliates. All rights reserved.
Download JDK 9 EA
Early access builds of JDK 9
available for testing:
https://jdk9.java.net/download/

There are periodic updates, so


check frequently for newer
builds.
See Summary of changes on
each build.

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Join the conversation
There are OpenJDK aliases for all
questions
http://mail.openjdk.java.net/mailman/listinfo

Every JEP lists its alias


Look for Discussion

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Download NetBeans Dev
Early access of NetBeans with
support for JDK 9 available at:
http://wiki.netbeans.org/JDK9Support

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Identify Problematic Dependencies
Use Java Dependency Analysis Tool (jdeps)

Available since JDK 8, Best results from the version in JDK 9 EA


Option to find internal dependencies
tzupdater-2.0.3-2015b $ jdeps tzupdater.jar
tzupdater.jar -> java.base
com.sun.tools.tzupdater -> com.sun.tools.tzupdater.utils tzupdater.jar
(...)
com.sun.tools.tzupdater -> java.util.regex java.base
com.sun.tools.tzupdater -> java.util.zip java.base
com.sun.tools.tzupdater -> sun.util.calendar JDK internal API (java.base)
com.sun.tools.tzupdater -> tools.javazic tzupdater.jar
(...)
com.sun.tools.tzupdater.utils -> java.util java.base
com.sun.tools.tzupdater.utils -> sun.util.calendar JDK internal API (java.base)
tools.javazic -> java.io java.base
(...)

https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool

Copyright 2017, Oracle and/or its affiliates. All rights reserved.


Stopgap: Expose Internal APIs
But come back and fix!

Sample command for earlier dev version of Netbeans

$ bin/netbeans --jdkhome ~/jdk9ea --add-exports java.desktop/sun.awt=ALL-UNNAMED --add-exports


java.base/jdk.internal.jrtfs=ALL-UNNAMED --add-exports java.desktop/java.awt.peer=ALL-UNNAMED -
-add-exports java.desktop/com.sun.beans.editors=ALL-UNNAMED --add-exports
java.desktop/sun.awt.im=ALL-UNNAMED --add-exports java.desktop/com.sun.java.swing.plaf.gtk=ALL-
UNNAMED --add-exports java.management/sun.management=ALL-UNNAMED,

Copyright 2017, Oracle and/or its affiliates. All rights reserved.

You might also like