Java uses a combination of compilation and interpretation.
It compiles the source code into bytecode instead of directly converting into machine code.
The reason is that machine code is dependent on the type of processor a system has. So the machine code generated will be specific to a particular system and hence is not portable.
So the bytecode is recognizable by JVM on different machines. My question is this. Since the JVM converts bytecode into machine code of the host machine. And since there are different types of host machines. Are there different JVMs corresponding to different machine types?
Yes.
Since the JVM must run on the target system, the JVM itself must (ultimately) be written in the appropriate machine-code.