Java 9 was officially released couple of months back this year. The Java 9 release took longer than anticipated because of the complexity which presented due to implementation of Modular JVM with Backward Compatibility. But usual Java release cycles are 4 months apart. Which means Java 10 should be released in early 2018. Let's have a look at what we can expect on Java 10 release.
New features and enhancements are introduced and tracked using Java Enhancement Process as JEPs, or by Java Community Process for standardization requests (JSRs). Most likely Java 10's changes will be arriving as JEPs and can be tracked via their JEP number because of Short time scale.
The features Java 10 most likely to contain would be the following;
Of these, JEP 296 is purely housekeeping and JEP 304 increases code isolation of different garbage collectors and introduces a clean interface for garbage collectors.
JEP 304 means that it will be easier for vendors to produce JDK builds that contain, or exclude a specific GC algorithm. With new GC approaches such as Shenandoah, ZGC and Epsilon in development, then this makes sense. There are even efforts within to deprecate and remove Concurrent Mark Sweep (CMS), but it is pending because there is no production grade alternative for it.
The most interesting change is JEP 286, which will allow developers to eliminate boilerplate in local variable declarations by enhancing type inference. This means that the following code can be written safely in Java as of the next release:
var list = new Vector(); // infers Vector var stream = list.stream(); // infers Stream
But for the time being this syntax will be restricted to local variables with initializers and local variables in for loops.
It is purely syntactic sugar implemented in the source code compiler and has no semantic significance.
The remaining three changes all have some impact, albeit potentially small, on performance.
JEP 307 solves a problem with the G1 garbage collector - Java 9 GC for G1 is implemented as a Single Threaded serial algorithm which will be developed as a Parallel algorithm by this change.
JEP 310 extends a feature called Class-Data Sharing (CDS), Which allows the JVM to archive class files into files so that those can be memory mapped to provide faster JVM loading. Eventhough this feature was available since Java 5, it was limited to bootstrap classloaders only. With this change it will be available for custom classloaders as well.
Last, JEP 312 set the base for improved VM performance, by making it possible to execute a callback on application threads without performing a global VM safepoint.
This shows that most like Java 10 will not contain grounbreaking change like Java 9 did but it will contain significant changes nevertheless. Let's wait for the official release shall we.