Where it fits in your line is within the interpreter. Rather than interpret the same code over and over, the JVM (interpreter and more for one low price!) can compile the Java byte code into binary machine code, then execute the machine code. It's a gamble that the time taken to compile will be made up in repeated execution. You get the benefit that your compile byte code is portable across JVMs from different vendors on different platforms. Some of those JVMs throw in the added benefit of compiling to machine code. Clever tool builders blur the lines between interpreters and compilers all the time. The REXX language usually has a pure interpreter, no compiler. But some interpreters pre-scan and generate something a lot like byte code. The inventor of REXX advised programmers to not study what he's doing, because about the time they write weird optimized code to work with one interpreter, he'll change it to run better with normal code and their special stuff will be slow again. Great advice!
A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi