Components of the Java Runtime Environment
The Java Virtual Machine (JVM) is the core runtime engine of Java, and the target platform for the Java compiler—in much the same way that a physical CPU can be the target for a compiler that produces native machine code.
At runtime, the JVM converts Java bytecode into machine language for the underlying CPU and architecture, immediately prior to execution; this is referred to as Just-In-Time (JIT) compilation. From 1999 onward, the JIT compilation of the JVM included adaptive optimization, a profiling feature that identified frequently used sections of code, optimizing and caching the resulting machine language code, for a significant performance improvement.
Beyond JIT, the key functional elements of the JVM include:
Bytecode verification: validation of the safety of operations to be performed.
Garbage collection: periodic reclamation of memory occupied by objects that are no longer referenced by or reachable from the running code.
Class loading: loading classes into memory (including static data and all methods) on first reference.
The runtime configuration of some of these operations can be set through options of the Java application launcher.