To support portability, Java source code is translated into architecture neutral
bytecodes that can be executed on any platform that supports an implementation
of the Java Virtual Machine (JVM).
Most JVM implementations execute Java bytecodes through either interpretation
or Just-In-Time (JIT) compilation. Since both interpretation and JIT compilation
require runtime translation of bytecodes,they both result in relatively slow execution times
for an application program.
While advances with JIT compilers are making progress towards improving
Java performance, existing Java execution techniques do not yet match the performance attained
by conventional compiled languages. Of course, performance improves when Java is compiled directly
to native machine code, but at the expense of diminished portability.