Valid points, but this doesn't mean JIT doesn't work for relatively lower-latency coding.
To avoid the compilation etc. hit, common practice is to do some "warmups" before serving users. (Another reply has other ways to avoid this hit.)
Handling exceptions is higher latency, but they can/should be optimized out, so you're not hitting exceptions as part of your standard workflow (or even your 1% workflow).
Exceptions depend on the workflow. For some high frequently trades the normal case is you won't make money so don't trade - the exceptions for them are the only case where latency matters.
Don't read the above, as you can't use JIT or Java for low latency. I never intended to say that. However, you are going to be fighting the system if you do try to use them. fighting the system even more than C where you have more control