.java β [javac] β .class (bytecode) β [JVM] β native machine code
Java code (.java) -> compile bytecode (platform-neutral) (.class) -> JVM loads -> JVM verifier, -> JVM execution engine runs 2 modes: -> Interpreter: line by line runs immediately -> JIT Compiler: detects hot paths and compiles to native machine code on fly (fast after warmup) -> JVM GC manages heap
JVM is a Process VM