This survey describes the different execution techniques that are currently being
used with the Java programming language. Section 2 describes the basic concepts behind the JVM. Section 3 discusses
the different Java execution techniques,
including interpreters, JIT and static compilers, and Java processors. In Section 4,
we describe several optimization techniques for improving Java performance,
including dynamic compilation, bytecode
optimization, and parallel and distributed
techniques. Section 5 reviews the existing benchmarks available to evaluate the
performance of the various Java execution
techniques with a summary of their performance presented in Section 6. Conclusions are presented in Section 7.