What are the differences between a Just-in-Time-Compiler and an Interpreter, and are there differences between the .NET and the Java JIT compiler?
tl;dr
Interpreter: takes only one instruction at a time for execution
Just-in-time: takes a block of code at once and compile it before execute. so has plenty room for optimization