Contents Prev Next Up

## The Java Virtual Machine

# About the Spec

Format
Purpose and Vision
The Java Interchange Specification
Abstractions Left to the Implementor

### Format

This document describes the Java virtual machine and the instruction set. In this introduction, each component of the machine is briefly described. This introduction includes a description of the format used to present the opcode instructions. The next chapter is the instructions themselves.

Chapter 3 is the spec for the Java class file format, the binary file produced by the Java compiler. The file will contain information about the class, its fields, its methods, and the virtual machine code required to execute the methods.

Appendix A contains some instructions used internally on the WebRunner/Java project for compiler optimization.

### Purpose and Vision

The Java virtual machine specification has a purpose that is both like and unlike equivalent documents for other languages and abstract machines. It is intended to present an abstract, logical machine design free from the distraction of inconsequential details of any implementation. It does not anticipate an implementation technology, or an implementation host. At the same time it gives a reader sufficient information to enable implementation of the abstract design in a range of technologies.

However, the intent of the WebRunner/Java project is to create a language and application that will allow the interchange over the Internet of "executable content," which will be embodied by compiled Java code. The project specifically does not want Java to be a proprietary language, and does not want to be the sole purveyor of Java language implementations. Rather, we hope to make documents like this one, and source code for our implementation, freely available for people to use as they choose.

This vision for WebRunner can only be achieved if the executable content can be reliably shared between different Java implementations. These intentions prohibit the definition of the Java virtual machine from being fully abstract. Rather, relevant logical elements of the design have to be made sufficiently concrete to enable the interchange of compiled Java code. This does not collapse the Java virtual machine specification to a description of an Java implementation; elements of the design that do not play a part in the interchange of executable content remain abstract. But it does force us to specify, in addition to the abstract machine design, a concrete interchange format for compiled Java code.

### The Java Interchange Specification

The Java interchange specification must contain the following components:

- the instruction set syntax, including opcode and operand sizes and types, alignment and endian-ness

- the instruction set opcode values

- the values of any identifiers (e.g. type identifiers) in instructions or in supporting structures

- the layout of supporting structures that appear in compiled Java code (e.g. the constant pool)

- the Java object format (the .class file format).

In this version of the Java virtual machine specification, many of these have not yet been described, and are priorities for the next release of the document.

### Abstractions Left to the Implementor

Elements of the design unrelated to the interchange of compiled Java code remain abstract, including:

- layout and management of the runtime data areas

- garbage collection algorithms, strategies and constraints

- the compiler, development environment, and runtime (apart from the need to generate and read valid compiled Java code)

- optimizations that can be performed once compiled Java code is received.

Contents Prev Next Up

Generated with CERN WebMaker