The Java virtual machine or JVM is a virtual machine that runs Java byte code, the code produced by a Java compiler or compilers from other languages which produce this code.
Programs written in Java are compiled into a standardized portable binary format, which typically comes in the form of files with the .class extension. A program may consist of many classes, in which case, every class will be in a different file. The first 4 bytes in hexadecimal of each class must be CA FE BA BE. Class files may be packaged together in a .jar file, with the exact same format as a .zip file, optionally with a few extra special files added.
This binary is then interpreted at runtime by a JVM. The main interpretation loop is described by the following pseudo-code
do { fetch an opcode; if (operands) fetch operands; execute the action for the opcode; } while (there is more to do);The JVM has a stack based architecture. Each thread has its own program counter.
The JVM has instructions for the following groups of tasks
- Load and store
- Arithmetic
- Type conversion
- Object Creation and Manipulation
- Operand stack management (push / pop)
- Control transfer (branching)
- Method invocation and return
- Throwing exceptions
The specification for the JVM is published in book form and HTML and anybody is allowed to write an implementation of it. The preface states:
- We intend that this specification should sufficiently document the Java Virtual Machine to make possible compatible clean-room implementations. Sun provides tests which verify the proper operation of implementations of the Java Virtual Machine.
See also:
External Link
- List of languages which compile to the Java virtual machine.
- Sun.com - THE JAVA VIRTUAL MACHINE SPECIFICATION