There has been a performance problem with Java applications execution performance since the Java technology was created. The simplest way to run Java is to interpret bytecode, which is generated after compilation of the Java application. This approach can be further polished with an interpreter loop written in assembly language. However, the software interpreter is still generally slower than the execution of an application compiled into machine code. Compilation of Java applications is one way to improve Java application performance.
The compilation approach has its drawbacks, but it is able to compete with applications in native machine code written in C/C++. The other approach described in this paper, which is able to compete with machine code compilation, is hardware acceleration of Java bytecode execution. This method has the potential to reach the same level of execution performance as machine code compilation but requires investing additional improvements into the Java Virtual Machine, as it was done when JIT compilers were introduced.