WHAT’S NEW IN JDKWHAT’S NEW IN JDK
1010
NEW RELEASE CYCLENEW RELEASE CYCLE
Predictable
LTS every 3 years
… but only for paying
customers
New Java every six months, Paradise Lost not
OPTIONALOPTIONAL
orElseThrow() - a preferred synonymous for
get()
UNMODIFIABLE COLLECTIONSUNMODIFIABLE COLLECTIONS
Some new goodies in the unmodifiable collections
introduced in 9
Good by Stuart Marks during Devoxx 2017talk
COPYOF()COPYOF()
copyOf() - create shallow unmodifiable copy (if
necessary)
List.copyOf(Collection<E> source)
Set.copyOf(Collection<E> source)
Map.copyOf(Map<K, V> source)
COLLECTORSCOLLECTORS
Collectors.toUnmodifiableList()
Collectors.toUnmodifiableSet()
Collectors.toUnmodifiableMap(keyMapper
valueMapper)
Collectors.toUnmodifiableMap(keyMapper
valueMapper, mergeFunction)
JEP 286: LOCAL-VARIABLE TYPEJEP 286: LOCAL-VARIABLE TYPE
INFERENCEINFERENCE
aka var
its not a keyword
only the right-hand side is considered
Everybody say non-denotable type with
me
EXAMPLESEXAMPLES
var list = new ArrayList<String>();
var map = new HashMap<String, Integer>();
for (var entry : map.entrySet()) {
var key = entry.getKey();
var value = entry.getValue();
}
var now = Instant.now(); // good - Instant type is obvious
LEARN FROM OTHERSLEARN FROM OTHERS
If you know people using C#, scala or any
other language that have type inference for ages
ask them what they do and why
do not use var for primitive types
do not use var if the type is not obvious
factory methods like Instant.now() and
UUID.randomUUID() are ok.

LEARN FROM ORACLELEARN FROM ORACLE
http://openjdk.java.net/projects/amber/LVTIstyle.html
DEMODEMO varvar
JEP 310: APPLICATION CLASS-JEP 310: APPLICATION CLASS-
DATA SHARINGDATA SHARING
reduce memory footprint
improve startup time
custom (app) class
loaders
-XX:+UseAppCDS
CREATE CLASS LIST FOR APPCDSCREATE CLASS LIST FOR APPCDS
Generates a simple text file (class name per line)
java -Xshare:off -XX:+UseAppCDS 
-XX:DumpLoadedClassList=classes.lst 
-cp CLASSPATH demo.App
DUMP APPCDS ARCHIVEDUMP APPCDS ARCHIVE
Dumps loaded classes in a binary archive
java -Xshare:dump -XX:+UseAppCDS 
-XX:SharedClassListFile=classes.lst 
-XX:SharedArchiveFile=classes.jsa 
-cp CLASSPATH demo.App
USE APPCDSUSE APPCDS
On production use -Xshare:auto
java -Xshare:on -XX:+UseAppCDS 
-XX:SharedClassListFile=classes.lst 
-XX:SharedArchiveFile=classes.jsa 
-cp CLASSPATH demo.App
TROUBLESHOOTINGTROUBLESHOOTING
classpath mismatch - classpath during -
Xshare:dump must be the same as, or be a prefix
of, the classpath during -Xshare:on. Use -
Xlog:class+path=info to analyze the error.
JVM may fail to map the memory file (e.g. ASLR). For
such cases using -Xshare:auto is recommended.
list classes loaded from AppCDS archive -
Xlog:class+load=info
WHAT’S MISSINGWHAT’S MISSING
non standardized archive storage
format
no support for --module-path yet
in oracle jdk its still commercial feature
RESOURCESRESOURCES
https://blog.codefx.org/java/application-class-data-
sharing
https://mjg123.github.io/2017/10/04/AppCDS-and-
Clojure.html
DEMO APPCDSDEMO APPCDS
Spring PetClinic
how creative, ha?
JVMCIJVMCI
Run Java Bytecode with Java Bases JIT Compiler
... that optimizes itself ;)
How cool is that?
-XX:+UnlockExperimentalVMOptions 
-XX:+UseJVMCICompiler

https://github.com/oracle/graal
PARALLEL FULL GC FOR G1PARALLEL FULL GC FOR G1
JEP DRAFT: CONTAINERJEP DRAFT: CONTAINER
AWARENESSAWARENESS
JDK-
8182070
JDK-
8146115
CPUCPU
-XX:ActiveProcessorCount=count
ForkJoinPool, Netty and tons of other stuff rely
Runtime.getRuntime().availableProcess
SYSTEM MEMORY AMOUNTSYSTEM MEMORY AMOUNT
-
XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage
IF YOU DO NOT LIKE IT???IF YOU DO NOT LIKE IT???
-XX:-
UseContainerSupport
ATTACH NOW WORKSATTACH NOW WORKS
JDK-8179498
DEMO DOCKERDEMO DOCKER
THANKSTHANKS
Q & A

What's New In JDK 10