Java uses javac (compiler) to convert the java code to byte code (.class file). Then, JVM internally converts the byte code to system understandable code using the interpreter in addition to it JVM.
Instead of executing a piece of code, again and again, JVM identifies them as “hot spots” and compiles them using Just in time compiler and, later reuses the same when required.
Just in Time compiler is a compiler which is used by JVM internally to translate the hot spots in the byte code to machine understandable code. The main purpose of JIT compiler is to do heavy optimizations in performance.