If we talk about java program execution, then we use INTERPRETER and COMPILER both.
Where there is compiler compiles the source code means .java file and create .class file included byte code there is Interpreter is used to execute byte code means .class file and create .exe file included machine code.
INTERPRETER is also a part of JVM. JVM uses Interpreter for execute java program.
JVM execution engine is also available for execute the java program. Execution engine includes three things :
Interpreter is used to execute the program but when any method calls use in program , so we had to interpretation this method again. So JIT compiler also use for increase the execution speed of INTERPRETER. We don't need to interpretation again of method calls. JIT compiler compiles the byte code and change it in native code. So when method calls repeats , JIT compiler provides native code to Interpreter.