From what I understand, there are three stages:
- interpreted
- If run 'enough' times, the code is JIT compiled (fast compilation)
- If run 'enough' times again, it is JIT compiled with the most optimizing compiler (slow compilation)
- interpreted
- If run 'enough' times, the code is JIT compiled (fast compilation)
- If run 'enough' times again, it is JIT compiled with the most optimizing compiler (slow compilation)