Java 1.3 (2000)
This was primarily a maintenance release, focused on bug fixes, stability, and
performance improvements. This release also brought in the HotSpot Java Vir‐
tual Machine, which is still in use today (although heavily modified and
improved since then).
Java 1.4 (2002)
This was another fairly big release, adding important new functionality such as
a higher-performance, low-level I/O API; regular expressions for text handling;
XML and XSLT libraries; SSL support; a logging API; and cryptography
Java 5 (2004)
This large release of Java introduced a number of changes to the core language
itself including generic types, enumerated types (enums), annotations, varargs
methods, autoboxing, and a new for loop. These changes were considered sig‐
nificant enough to change the major version number, and to start numbering
as major releases. This release included 3,562 classes and interfaces in 166
packages. Notable additions included utilities for concurrent programming, a
remote management framework, and classes for the remote management and
instrumentation of the Java VM itself.
Java 6 (2006)
This release was also largely a maintenance and performance release. It intro‐
duced the Compiler API, expanded the usage and scope of annotations, and
provided bindings to allow scripting languages to interoperate with Java. There
were also a large number of internal bugfixes and improvements to the JVM
and the Swing GUI technology.
Java 7 (2011)
The first release of Java under Oracle's stewardship included a number of major
upgrades to the language and platform. The introduction of try -with-resources
and the NIO.2 API enabled developers to write much safer and less error-prone
code for handling resources and I/O. The Method Handles API provided a
simpler and safer alternative to reflection—and opened the door for invokedy
namic (the first new bytecode since version 1.0 of Java).
Java 8 (2014)
This latest release of Java introduces potentially the most significant changes to
the language since Java 5 (or possibly ever). The introduction of lambda
expressions promises the ability to significantly enhance the productivity of
developers; the Collections have been updated to make use of lambdas, and the
machinery required to achieve this provides a fundamental change in Java's
approach to object orientation. Other major updates include an implementa‐
and Java profiles (which provide for different versions of Java that are especially
suitable for headless or server deployments).