Java achieves superior performance by adopting a scheme by which the interpreter can run at full speed without needing to check the runtime environment
The automatic garbage collector runs as a low priority background thread, ensuring a high probability that memory is available when required, leading to better performance
Applications requiring large amounts of compute power can be designed such that compute intensive sections can be rewritten in native machine code as required and interfaced with the Java environment
Benchmarks (minimum in interpreted mode)
new Object 119,000 per second
new C() (class with several methods) 89,000 per second
of() (method if invoked on object o) 590,000 per second
osf() (synchronized method f invoked on object o) 61,500 per second
Performance can be increased by compiling to native "on-the-fly"