Java 8 is expected in September 2013. It will include a number of deferred features that were originally planned for Java 7 and also some new ones. Will this be the new release that developers have really been clamoring for? In this series, I will focus on a few features that have been anxiously awaited and discuss what I think they might mean to the community.
For a full run down of JDK enhancement proposals that were accepted and funded, check out http://openjdk.java.net/projects/jdk8/features. Or, go and download the JDK 8 Early Access and start playing with the new features now.
Last time,I introduced changes in Date and Time, Type Annotations, Metaspace replacing PermGen and Project Nashorn.
In this last post in the series, I wanted to finish with a feature that is not coming in Java 8: Project Jigsaw.
Project Jigsaw was envisioned back in the Java 6 days and was initially planned to roll out with Java 7, then pushed to Java 8. It has recently been deferred again to Java 9. The goal of this project is to make Java fully modular.
Since the beginning, Java has grown from a language built for embedded devices into a huge and rich collection of libraries focusing initially on desktop client and now having most penetration in server-side apps. While it's convenient to have this whole collection at one's disposal, it comes with costs. The Java Development Kit and Runtime Environment are delivered as single, massive artifacts. Big downloads are only the beginning. There are innumerable interconnections between the libraries. Over time, and through organic growth, it is natural to build upon what has come before. This has resulted in unexpected and even unplanned connections and dependencies, leading to scenarios where trivial code sometimes requires nontrivial amounts of library loading. This results in longer startup times and larger memory footprints. When scaled up to non-trivial code and beyond to large frameworks, it becomes practically problematic. Over the years, efforts such as class-data sharing, class-file compression, the Java kernel, and the Quickstarter features have each made incremental gains that address the symptoms more than the underlying cause.
The real solution is to modularize the JDK into separate, well-specified, interdependent modules. This will allow developers to make decisions about modules, allow for module customization, improve startup time and memory footprint, and allow for quicker downloads too.
Of course, if the language can be modularized, then why not allow developers to apply the technology to their own tools and features? With this in mind, the modularization opportunity spills over into packaging. There are opportunities to change the way that JAR files, class paths and class loaders work to take advantage of modular flexibility.
With all of these changes to consider, many JDK tools will need to be reworked, new tools added, and old tools deprecated.
For a very in-depth treatment, I recommend Mark Reinhold's Blog, with four excellent posts dedicated to the subject.
So, Project Jigsaw is huge. It is also wrestling with how to rationalize, adopt, adapt or ignore existing modularization approaches such as OSGi. With so much to consider and so much to do, delays are inevitable. It is hard to argue with the goals and eventual outcomes of the project. It will be a boon to Java once delivered. Let's hope Java 9 has it, but delaying for 8 is a great decision to me.
I hope you’ve enjoyed this walkthrough of some of the most interesting pieces coming (and not coming) to Java 8 in the fall. I’d love to hear from you. What are you looking forward to? What elicits yawns? Will you jump on the Lambda train or throw yourself from the tracks to get out of its way?