I just read C++ performance vs Java/C#.
As already said in the previous posts, JIT can compile IL/bytecode into native code at runtime. The cost of that was mentionned, but not to its conclusion:
JIT has one massive problem is that it can't compile everything: JIT compiling takes time, so the JIT will compile only some parts of the code, whereas a static compiler will produce a full native binary: For some kind of programs, the static compiler will simply easily outperform the JIT.
And I got a curiosity why java doesn't compile everything while installing it in device.
If it does, we don't need to think about performance loss with compilation time, and conform to diverse devices.