© Copyright Azul Systems 2017
© Copyright Azul Systems 2015
@speakjava
JDK 9: Mission Accomplished
What Next For Java?
Simon Ritter
Deputy CTO, Azul Systems
1
© Copyright Azul Systems 2017
JDK 9
© Copyright Azul Systems 2017
JDK 9: Big And Small Changes
3
© Copyright Azul Systems 2017
Java Platform Module System
 The core Java libraries are now a set of modules
– 97 modules for JDK, 28 of which are Java SE
– No more rt.jar or tools.jar files
 Most internal APIs are now encapsulated
– sun.misc.Unsafe, etc.
– Numerous libraries and frameworks use internal APIs
 Module path used to locate modules
– Separate and distinct from classpath
4
© Copyright Azul Systems 2017
JDK 9 And Compatibility
5
"Clean applications that just depend on java.se
should just work" - Oracle
The java.se.ee module is not included on the
modulepath for javac or the JVM by default
© Copyright Azul Systems 2017
JPMS And Existing Applications
 Initially, leave everything on the classpath
 Anything on the classpath is in the unnamed module
– All packages are exported
– The unnamed module depends on all modules
 Migrate to modules as required
– Try automatic modules
– Move existing jar files from classpath to modulepath
6
© Copyright Azul Systems 2017
Breaking Encapsulation
 "The Big Kill Switch" to turn off encapsulation
– --illegal-access
 permit: Warning for first use of an encapsulated API
 warn: Warning for every use of an encapsulated API
 debug: Warning and stack trace for every use
 deny: No access to encapsulated APIs
7
© Copyright Azul Systems 2017
Breaking Encapsulation
 Allowing direct access to encapsulated APIs
– --add-exports
 Allowing reflective access to encapsulated APIs
– --add-opens
8
--add-exports java.management/com.sun.jmx.remote.internal=mytest
--add-exports java.management/sun.management=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
© Copyright Azul Systems 2017
jlink: The Java Linker (JEP 282)
9
Modular run-time
image
…confbin
jlink
$ jlink --modulepath $JDKMODS 
--addmods java.base –output myimage
$ myimage/bin/java –-list-modules
java.base@9
jmods
© Copyright Azul Systems 2017
jlink: The Java Linker (JEP 282)
$ jlink --module-path $JDKMODS:$MYMODS 
--addmods com.azul.app –-output myimage
$ myimage/bin/java –-list-modules
java.base@9
java.logging@9
java.sql@9
java.xml@9
com.azul.app@1.0
com.azul.zoop@1.0
com.azul.zeta@1.0
© Copyright Azul Systems 2017
The Implications Of jlink
 "Write once, run anywhere"
– Long term Java slogan, mainly held true
 jlink generated runtime may not include all Java SE
modules
– But is still a conformant Java implementation
– To be conformant:
 It must include the java.base module
 If other modules are included, all transitive module dependencies
must also be included
– Defined as a closed implementation
© Copyright Azul Systems 2017
JDK Development Changes
© Copyright Azul Systems 2017
OpenJDK: New Release Model
 A new version of the JDK will be released every six months
– March and September
– Starting next year
 OpenJDK development will be more agile
– Previous target was a release every two years
 Three and a half years between JDK 8 and JDK 9
 Features will be included only when ready
– Targeted for a release when feature complete
– Not targeted at specific release when started
13
© Copyright Azul Systems 2017
OpenJDK: More Open Source
 Oracle will open-source closed-source parts of the JDK
– Flight recorder
– Mission control
 The goal is for there to be no functional difference between
an Oracle binary and a binary built from OpenJDK source
– Targeted for completion late 2018
14
© Copyright Azul Systems 2017
JDK Version Numbering
 New scheme introduced in JDK 9 (JEP 223)
– JDK ${MAJOR}.${MINOR}.${SECURITY}
– Semantic versioning
– Easier to understand by humans and computers
15
© Copyright Azul Systems 2017
JDK Version Numbering
 New proposal for subsequent releases
– JDK ${YEAR}.${MONTH}
 JDK 18.3, JDK 18.9, etc.
– Same concept as used by Ubuntu
– Many people not happy about this
16
© Copyright Azul Systems 2017
JDK Version Numbering
 New, new scheme. Just proposed
– $FEATURE.$INTERIM.$UPDATE.$EMERG
– FEATURE: Was MAJOR, i.e. 10, 11, etc.
– INTERIM: Was MINOR. Reserved for future use
– UPDATE: Was SECURITY, but with different incrementing rule
– EMERG: Emergency update outside planned schedule
17
© Copyright Azul Systems 2017
Availability Of JDK Updates
 Oracle are switching to a long term support (LTS) model
 LTS release will have 3 years of public updates
– JDK 8 has been classified as an LTS release
 It will have updates for more than 3 years
– Next LTS release will be September, 2018
 Non-LTS releases are "Feature Releases"
– JDK 9 is a feature release
– Public updates only until next feature release
 JDK 9 public updates end in March, 2018
18
© Copyright Azul Systems 2017
Deprecated in JDK 9: Soon To Go
 Applets as a deployment mechanism
 CMS garbage collector
 Java policy tool, jconsole, Doclet API, other small things
 java.se.ee meta-module
 java.corba
 java.transaction
 java.activation
 java.xml.bind
 java.xml.ws
 java.xml.ws.annotation
19
© Copyright Azul Systems 2017
Oracle Binaries
 Until now released under Oracle Binary Code License
– Have to accept to download
– Classic "field-of-use" restriction
 Moving forward
– Binaries available under GPLv2 with CPE
– No more 32-bit binaries
– No more ARM binaries
– Windows, Linux, Mac and Solaris SPARC only
 All 64-bit
20
© Copyright Azul Systems 2017
JDK.${NEXT}
© Copyright Azul Systems 2017
JDK 18.3 10
 JSR 383 submitted and expert group formed
– Lead by Brian Goetz
– Oracle, IBM, Red Hat, SAP and Azul (Me)
 Schedule approved
– Development complete: 14/12/17
– Release candidate: 22/2/18
– General Availability: 20/3/18
 Early draft review already published
22
© Copyright Azul Systems 2017
JDK 18.3 10 (Current)
 JEP 286: Local variable type inference
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
 A few small API changes
– New replace method in java.util.Properties
– New toString method in java.util.concurrent.FutureTask
– Two new methods in java.lang.StackWalker.StackFrame
– Four new methods in java.util.concurrent.locks.StampedLock
23
© Copyright Azul Systems 2017
Longer Term JDK Futures
© Copyright Azul Systems 2017
Interesting Future JEPs
 JEP 304: GC Interface
– Internal JVM interface to allow easy change of GC
– Nice for us at Azul
 JEP 305: Pattern matching
– Type test and switch statement support to start
 JEP 310: Application class data sharing (CDS)
– Extend CDS to include application classes as well as JDK
 JEP 312: Thread-local handshakes
– JVM ability to stop individual threads
– Lower latency
25
© Copyright Azul Systems 2017
Project Amber
 JEP 286: Local variable type inference
– Already included in JDK 10
 JEP 301: Enhanced enums
– Generic enums
– Sharper type-checking of constants
 JEP 302: Lambda leftovers
– Underscores for unused parameters
– Shadowing of Lambda parameters
– Better disambiguation of functional expressions
26
© Copyright Azul Systems 2017
Project Valhalla
 Value types in Java
 Why do we need them?
27
Identity leads to pointers
Pointers lead to indirection
Indirection leads to suffering
(of performance)
© Copyright Azul Systems 2017
Project Valhalla
 Java has:
– Primitives: for performance
– Objects: for encapsulation, polymorphism, inheritance, OO
 Problem is where we want to use primitives but can't
– ArrayList<int> won't work
– ArrayList<Integer> requires boxing and unboxing,
object creation, heap overhead, indirection reference
28
© Copyright Azul Systems 2017
Project Valhalla
 Value types
 "Codes like a class, works like a primitive"
– Can have methods and fields
– Can implement interfaces
– Can use encapsulation
– Can be generic
29
© Copyright Azul Systems 2017
Project Panama
 Interconnecting JVM and native code
– Native function calls from JVM (C, C++)
– Native data access from JVM or inside JVM heap
– Header file API extraction tools
– Native library management APIs
– Class and method resolution “hooks”
– Native-oriented JIT optimizations
30
© Copyright Azul Systems 2017
Project Loom
 Further work on making concurrent programming simpler
 Threads are too heavyweight
– Too much interaction with operating system
 Loom will introduce fibres
– JVM level threads (remember green threads?)
– Add continuations to the JVM
– Use the ForkJoinPool scheduler
– Much lighter weight than threads
 Less memory
 Close to zero overhead for task switching
31
© Copyright Azul Systems 2017
Conclusions
© Copyright Azul Systems 2017
Java Continues Moving Forward
 JDK 9 is out
– But not an LTS
– JPMS may require changes to existing applications
 Faster Java releases
– Feature release every 6 months, LTS every 3 years
– OpenJDK binaries under GPLv2 with CPE license
 Lots of ideas to improve Java
– Value types, better JNI, better type inference
– Many smaller things
33
© Copyright Azul Systems 2017
Zulu Java
 Azul’s binary distribution of OpenJDK
– Passes all TCK tests
– Multi-platform (Windows, Linux, Mac)
– FREE!
 Happy to sell you support, including older versions
 JDK 6, 7, 8 and 9
34
www.zulu.org/download
© Copyright Azul Systems 2017
© Copyright Azul Systems 2015
@speakjava
Thank you!
Simon Ritter
Deputy CTO, Azul Systems
35

JDK 9: Mission Accomplished. What Next For Java?

  • 1.
    © Copyright AzulSystems 2017 © Copyright Azul Systems 2015 @speakjava JDK 9: Mission Accomplished What Next For Java? Simon Ritter Deputy CTO, Azul Systems 1
  • 2.
    © Copyright AzulSystems 2017 JDK 9
  • 3.
    © Copyright AzulSystems 2017 JDK 9: Big And Small Changes 3
  • 4.
    © Copyright AzulSystems 2017 Java Platform Module System  The core Java libraries are now a set of modules – 97 modules for JDK, 28 of which are Java SE – No more rt.jar or tools.jar files  Most internal APIs are now encapsulated – sun.misc.Unsafe, etc. – Numerous libraries and frameworks use internal APIs  Module path used to locate modules – Separate and distinct from classpath 4
  • 5.
    © Copyright AzulSystems 2017 JDK 9 And Compatibility 5 "Clean applications that just depend on java.se should just work" - Oracle The java.se.ee module is not included on the modulepath for javac or the JVM by default
  • 6.
    © Copyright AzulSystems 2017 JPMS And Existing Applications  Initially, leave everything on the classpath  Anything on the classpath is in the unnamed module – All packages are exported – The unnamed module depends on all modules  Migrate to modules as required – Try automatic modules – Move existing jar files from classpath to modulepath 6
  • 7.
    © Copyright AzulSystems 2017 Breaking Encapsulation  "The Big Kill Switch" to turn off encapsulation – --illegal-access  permit: Warning for first use of an encapsulated API  warn: Warning for every use of an encapsulated API  debug: Warning and stack trace for every use  deny: No access to encapsulated APIs 7
  • 8.
    © Copyright AzulSystems 2017 Breaking Encapsulation  Allowing direct access to encapsulated APIs – --add-exports  Allowing reflective access to encapsulated APIs – --add-opens 8 --add-exports java.management/com.sun.jmx.remote.internal=mytest --add-exports java.management/sun.management=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED
  • 9.
    © Copyright AzulSystems 2017 jlink: The Java Linker (JEP 282) 9 Modular run-time image …confbin jlink $ jlink --modulepath $JDKMODS --addmods java.base –output myimage $ myimage/bin/java –-list-modules java.base@9 jmods
  • 10.
    © Copyright AzulSystems 2017 jlink: The Java Linker (JEP 282) $ jlink --module-path $JDKMODS:$MYMODS --addmods com.azul.app –-output myimage $ myimage/bin/java –-list-modules java.base@9 java.logging@9 java.sql@9 java.xml@9 com.azul.app@1.0 com.azul.zoop@1.0 com.azul.zeta@1.0
  • 11.
    © Copyright AzulSystems 2017 The Implications Of jlink  "Write once, run anywhere" – Long term Java slogan, mainly held true  jlink generated runtime may not include all Java SE modules – But is still a conformant Java implementation – To be conformant:  It must include the java.base module  If other modules are included, all transitive module dependencies must also be included – Defined as a closed implementation
  • 12.
    © Copyright AzulSystems 2017 JDK Development Changes
  • 13.
    © Copyright AzulSystems 2017 OpenJDK: New Release Model  A new version of the JDK will be released every six months – March and September – Starting next year  OpenJDK development will be more agile – Previous target was a release every two years  Three and a half years between JDK 8 and JDK 9  Features will be included only when ready – Targeted for a release when feature complete – Not targeted at specific release when started 13
  • 14.
    © Copyright AzulSystems 2017 OpenJDK: More Open Source  Oracle will open-source closed-source parts of the JDK – Flight recorder – Mission control  The goal is for there to be no functional difference between an Oracle binary and a binary built from OpenJDK source – Targeted for completion late 2018 14
  • 15.
    © Copyright AzulSystems 2017 JDK Version Numbering  New scheme introduced in JDK 9 (JEP 223) – JDK ${MAJOR}.${MINOR}.${SECURITY} – Semantic versioning – Easier to understand by humans and computers 15
  • 16.
    © Copyright AzulSystems 2017 JDK Version Numbering  New proposal for subsequent releases – JDK ${YEAR}.${MONTH}  JDK 18.3, JDK 18.9, etc. – Same concept as used by Ubuntu – Many people not happy about this 16
  • 17.
    © Copyright AzulSystems 2017 JDK Version Numbering  New, new scheme. Just proposed – $FEATURE.$INTERIM.$UPDATE.$EMERG – FEATURE: Was MAJOR, i.e. 10, 11, etc. – INTERIM: Was MINOR. Reserved for future use – UPDATE: Was SECURITY, but with different incrementing rule – EMERG: Emergency update outside planned schedule 17
  • 18.
    © Copyright AzulSystems 2017 Availability Of JDK Updates  Oracle are switching to a long term support (LTS) model  LTS release will have 3 years of public updates – JDK 8 has been classified as an LTS release  It will have updates for more than 3 years – Next LTS release will be September, 2018  Non-LTS releases are "Feature Releases" – JDK 9 is a feature release – Public updates only until next feature release  JDK 9 public updates end in March, 2018 18
  • 19.
    © Copyright AzulSystems 2017 Deprecated in JDK 9: Soon To Go  Applets as a deployment mechanism  CMS garbage collector  Java policy tool, jconsole, Doclet API, other small things  java.se.ee meta-module  java.corba  java.transaction  java.activation  java.xml.bind  java.xml.ws  java.xml.ws.annotation 19
  • 20.
    © Copyright AzulSystems 2017 Oracle Binaries  Until now released under Oracle Binary Code License – Have to accept to download – Classic "field-of-use" restriction  Moving forward – Binaries available under GPLv2 with CPE – No more 32-bit binaries – No more ARM binaries – Windows, Linux, Mac and Solaris SPARC only  All 64-bit 20
  • 21.
    © Copyright AzulSystems 2017 JDK.${NEXT}
  • 22.
    © Copyright AzulSystems 2017 JDK 18.3 10  JSR 383 submitted and expert group formed – Lead by Brian Goetz – Oracle, IBM, Red Hat, SAP and Azul (Me)  Schedule approved – Development complete: 14/12/17 – Release candidate: 22/2/18 – General Availability: 20/3/18  Early draft review already published 22
  • 23.
    © Copyright AzulSystems 2017 JDK 18.3 10 (Current)  JEP 286: Local variable type inference var list = new ArrayList<String>(); // infers ArrayList<String> var stream = list.stream(); // infers Stream<String>  A few small API changes – New replace method in java.util.Properties – New toString method in java.util.concurrent.FutureTask – Two new methods in java.lang.StackWalker.StackFrame – Four new methods in java.util.concurrent.locks.StampedLock 23
  • 24.
    © Copyright AzulSystems 2017 Longer Term JDK Futures
  • 25.
    © Copyright AzulSystems 2017 Interesting Future JEPs  JEP 304: GC Interface – Internal JVM interface to allow easy change of GC – Nice for us at Azul  JEP 305: Pattern matching – Type test and switch statement support to start  JEP 310: Application class data sharing (CDS) – Extend CDS to include application classes as well as JDK  JEP 312: Thread-local handshakes – JVM ability to stop individual threads – Lower latency 25
  • 26.
    © Copyright AzulSystems 2017 Project Amber  JEP 286: Local variable type inference – Already included in JDK 10  JEP 301: Enhanced enums – Generic enums – Sharper type-checking of constants  JEP 302: Lambda leftovers – Underscores for unused parameters – Shadowing of Lambda parameters – Better disambiguation of functional expressions 26
  • 27.
    © Copyright AzulSystems 2017 Project Valhalla  Value types in Java  Why do we need them? 27 Identity leads to pointers Pointers lead to indirection Indirection leads to suffering (of performance)
  • 28.
    © Copyright AzulSystems 2017 Project Valhalla  Java has: – Primitives: for performance – Objects: for encapsulation, polymorphism, inheritance, OO  Problem is where we want to use primitives but can't – ArrayList<int> won't work – ArrayList<Integer> requires boxing and unboxing, object creation, heap overhead, indirection reference 28
  • 29.
    © Copyright AzulSystems 2017 Project Valhalla  Value types  "Codes like a class, works like a primitive" – Can have methods and fields – Can implement interfaces – Can use encapsulation – Can be generic 29
  • 30.
    © Copyright AzulSystems 2017 Project Panama  Interconnecting JVM and native code – Native function calls from JVM (C, C++) – Native data access from JVM or inside JVM heap – Header file API extraction tools – Native library management APIs – Class and method resolution “hooks” – Native-oriented JIT optimizations 30
  • 31.
    © Copyright AzulSystems 2017 Project Loom  Further work on making concurrent programming simpler  Threads are too heavyweight – Too much interaction with operating system  Loom will introduce fibres – JVM level threads (remember green threads?) – Add continuations to the JVM – Use the ForkJoinPool scheduler – Much lighter weight than threads  Less memory  Close to zero overhead for task switching 31
  • 32.
    © Copyright AzulSystems 2017 Conclusions
  • 33.
    © Copyright AzulSystems 2017 Java Continues Moving Forward  JDK 9 is out – But not an LTS – JPMS may require changes to existing applications  Faster Java releases – Feature release every 6 months, LTS every 3 years – OpenJDK binaries under GPLv2 with CPE license  Lots of ideas to improve Java – Value types, better JNI, better type inference – Many smaller things 33
  • 34.
    © Copyright AzulSystems 2017 Zulu Java  Azul’s binary distribution of OpenJDK – Passes all TCK tests – Multi-platform (Windows, Linux, Mac) – FREE!  Happy to sell you support, including older versions  JDK 6, 7, 8 and 9 34 www.zulu.org/download
  • 35.
    © Copyright AzulSystems 2017 © Copyright Azul Systems 2015 @speakjava Thank you! Simon Ritter Deputy CTO, Azul Systems 35

Editor's Notes

  • #26 JEP 312: Global safepoint