Java SE version 9 is finally released today, following what have seemed like endless delays. The main change to the new version is support for modules, aka Jigsaw..

The most recent delay, at a point where the release was imminent, was to give the Java Expert Group time to get Project Jigsaw back into the mix. It is this feature that provides a way for Java programmers to write code consisting of independent modules. It defines a standard module system for the Java platform and has been used to modularize the platform itself and applications. Jigsaw, along with Lambda and Coin, was originally intended to be in Java 7 and all three of these were held over to be in Java 8.

It has proved to be a major cause of dissent among the members of the JCP Executive Committee (EC), especially the Java Platform Module System. Back in May, the JCP Executive committee rejected the inclusion of Project Jigsaw and therefore modules as being too disruptive for developers. The main voters against the inclusion (Red Hat and IBM) either have or back alternative module systems.

Now it is finally here, the module support will, it is hoped, reduce the size and complexity of both Java applications and the core Java runtime.

The division of JDK into modules means developers can combine the JDK's modules into a variety of configurations, including:

Configurations corresponding to the JRE and the JDK

Configurations roughly equivalent in content to each of the Compact Profiles defined in Java SE 8

Custom configurations that contain only a specified set of modules and their required modules

The move to modules also restructures the JDK and JRE runtime images to accommodate modules. The hope is that this will improve performance, security, and maintainability. The change also makes most of the JDK's internal APIs inaccessible by default but leaves a few critical, widely used internal APIs accessible until supported replacements exist for all or most of their functionality.

One point to note is that since the intention is that Java 8 will continue to be supported until 2022, it is still perfectly viable to continue using Java 8 until the dust settles around Java 9.