Ваш код может быть скомпилирован из байт-кода в нативный код JVM, если он «достаточно горячий»; и он может быть скомпилирован несколько раз, при этом старая версия будет удалена, в зависимости от характеристик времени выполнения вашей программы.
JIT - сложный зверь; на самом деле Sun JVM имеет два JIT (-client и -server), которые ведут себя по-разному друг от друга, и некоторые реализации даже поддерживают оба JIT, работающие вместе (поэтому вы могли интерпретировать байт-код, выполняемый вместе с кодом, скомпилированным двумя различными JIT в вашем приложении) .
Я рекомендую вам прочитать больше о Hotspot (наиболее распространенном JIT, так как это Sun), если вы действительно интересуетесь этой темой. Вы можете начать со страницы Sun .