Monday, December 13, 2010

JDK7 and Java SE7

Most of all are knowing about the Java 7 is planned to release on mid 2011. This JDK will have new feature which all we can categorize in these : Productivity, Performance, Universality, Modularity Integration, Serviceability.

In the Productivity area, we should expect to see new features like simplified Generics, which allows for easier code writing by not having to repeat the generic part both in the declaration of the variable and in the instantiation of the object. There's also the new try syntax for using resources, which allows you to declare temporal resources that need to be closed after the try block is done.

In the performance area, there are several things that come for the new version, which include the Fork/Join Framework, in which you can take a long running process and divide it in several threads, which is done automatically by the framework. Also, they introduced the concept of Lambda expressions, which is Java's way of implementing closures, combined with default methods for Interface declarations to allow for the expressions simplification. They also introduced the concept of reification, value classes and the long awaited properties.

In the universality area, they introduced a new project, DaVinci, which will allow first-class architectural support for languages other than java, like Ruby and Python.

Modularity integration, which they call Project Jigsaw, is probably one of the coolest features to me, and what they're trying to do is take away the classpath "hell" in which you have to define every single jar on the command line, and instead you create modules, and use a special module definition language where you specify the dependencies. New tools are introduced for this, jpkg which creates modules, and jmod, which allows for the management of the modules. When you create a new module, you install it in a local repository. As for the dependencies, you can add external module repositories so that the dependencies are downloaded and installed automatically. They even integrate with Maven, which is great because there are already lots of resources in the different maven repositories. There's also a new package format, jmod, which is supposed to be better for compressing java class files, and they will even support the generation of rpm (one of Linux package formats) natively. This is more a less extensive modularity feature of new Java.

Finally, in the Serviceability area, something called JVM Convergence, in which they want to extend the concept of a jvm make it a black box, which means you will be running a virtual machine that might be composed of one or more real machines in the background.

As for the release schedule, it seems like they are going with plan B. In case you didn't know, Mark Reinhold commented on his blog the current release schedule and how it was unrealistic. Some of the features have been finished, like Project Coin (in part) , InvokeDynamic (dynamic language support) and Fork/Join Framework and some features that aren't finished like Jigsaw (modules) and Lambda (closures). The idea is to release the completed features mid 2011, and move the rest of them to Java 8, to be released (hopefully) Late 2012.

More information about this can be found at the main JDK 7 site.