Preface to the Java SE 7 Edition

Gilad Bracha

Alex Buckley

The Java® SE 7 Edition of The Java Virtual Machine Specification incorporates all the changes that have been made to the Java Virtual Machine since the Second Edition in 1999. In addition, numerous corrections and clarifications have been made to align with popular implementations of the Java Virtual Machine, and with concepts common to the Java Virtual Machine and the Java programming language.

Readers may send feedback about errors and ambiguities in The Java Virtual Machine Specification to jvms-comments_ww@oracle.com.

The Java SE 5.0 platform in 2004 brought momentous changes to the Java programming language but had a relatively muted effect on the design of the Java Virtual Machine. Additions were made to the class file format to support new Java programming language features such as generics and variable arity methods.

The Java SE 6 platform in 2006 saw no changes to the Java programming language but an entirely new approach to bytecode verification in the Java Virtual Machine. Eva Rose, in her Master's Thesis, proposed a radical revision of bytecode verification in the context of the Java Card platform. This led to an implementation for Java ME CLDC, and eventually to the revision of the Java SE verification process documented in Chapter 4.

Sheng Liang implemented the Java ME CLDC verifier. Antero Taivalsaari led the overall specification of Java ME CLDC and Gilad Bracha was responsible for specifying the verifier. Alessandro Coglio's analysis of bytecode verification was the most extensive, realistic, and thorough study of the topic, and contributed greatly to the specification. Wei Tao, together with Frank Yellin, Tim Lindholm, and Gilad Bracha, implemented the Prolog verifier that formed the basis for the specification in both Java ME and Java SE. Wei then implemented the specification "for real" in the HotSpot JVM. Later, Mingyao Yang improved the design and specification, and implemented the final version that shipped in the Reference Implementation of Java SE 6. The specification also benefited from the efforts of the JSR 202 Expert Group: Peter Burka, Alessandro Coglio, Sanghoon Jin, Christian Kemper, Larry Rau, Eva Rose, and Mark Stolz.

The Java SE 7 platform in 2011 made good on the promise given in the First Edition of The Java Virtual Machine Specification in 1997: "In the future, we will consider bounded extensions to the Java virtual machine to provide better support for other languages." Gilad Bracha, in his work on hotswapping, anticipated the burden of the Java Virtual Machine's static type system on implementers of dynamically-typed languages. Consequently, the invokedynamic instruction and its supporting infrastructure were developed by John Rose and the JSR 292 Expert Group: Ola Bini, Rémi Forax, Dan Heidinga, Fredrik Öhrström, and Jochen Theodorou, with special contributions from Charlie Nutter and Christian Thalinger.

More people than we can mention here have, over time, contributed to the design and implementation of the Java Virtual Machine. The excellent performance we see in the Java Virtual Machine implementations of today would never have been possible without the technological foundation laid by David Ungar and his colleagues at the Self project at Sun Labs. This technology took a convoluted path, from Self on through the Animorphic Smalltalk VM to eventually become the HotSpot JVM. Lars Bak and Urs Hölzle are the two people who were present through all these stages, and are more responsible than anyone else for the high performance we take for granted in Java Virtual Machine implementations today.

This specification has been significantly improved thanks to contributions from Martin Buchholz, Brian Goetz, Paul Hohensee, David Holmes, Karen Kinnear, Keith McGuigan, Jeff Nisewanger, Mark Reinhold, Naoto Sato, and Bill Pugh, as well as Uday Dhanikonda, Janet Koenig, Adam Messinger, John Pampuch, Georges Saab, and Bernard Traversat. Jon Courtney and Roger Riggs helped to ensure this specification is applicable to Java ME as much as Java SE. Leonid Arbouzov, Stanislav Avzan, Yuri Gaevsky, Ilya Mukhin, Sergey Reznick, and Kirill Shirokov have done outstanding work in the Java Compatibility Kit to ensure this specification is both testable and tested.