The JVM starts by interpreting bytecode, then JIT‑compiles “hot” methods to native code based on profiling. Early requests can be slower; after warm‑up, optimized machine code runs faster.