Just In Time Compilation has a number of theoretical advantages: it has more information about the machine, the state of flags, and how the code is used. It allows you to avoid time-consuming compilation before running, speeding up the development cycle.
Simplistically, JIT compilation seems superior as an approach; there is some overhead, but if Sufficiently Smart it can speed up your code enough to offset that.
However, I don't think that's the whole story. What are the theoretical and practical downsides? Yes, "slower startup time" is often mentioned, as is "increased memory consumption", but I wonder if there is more than that.
For example, does tracing and JIT compilation trash the cpu cache? If your program is large and doesn't really have many particularly hot paths, is there a risk of spending more time tracing and JIT-ting than would be worthwhile?
It seems likely that someone has written a paper on this or on solving problems inherent in JIT. If someone has measurements, all the better.
Edit: I'm talking about Just In Time compilation in comparison to ahead of time compilation (potentially with feedback directed optimization), not in comparison to interpretation.