This document discusses just-in-time (JIT) compilation techniques in modern runtimes. It outlines two main approaches to JIT - method-based compilation and tracing JIT. It then describes specific techniques used in the HotSpot JVM, including its fast interpreter, two-tiered JIT compilation, runtime profiling, devirtualization, incremental compilation, on-stack replacement, escape analysis and scalar replacement. It also discusses how the garbage collector interacts with compiled code.