Runtime AtlasJava platform fieldbook
Java · Language to RuntimeView Markdown source

JVM, memory, garbage collection, and JIT

The JVM loads classes, verifies bytecode, manages memory, schedules execution, and optimizes hot code.

Runtime memory

  • Heap: objects and arrays, managed by garbage collection.
  • Thread stack: frames, local variables, operand stacks, return information.
  • Metaspace: class metadata in native memory.
  • Code cache: compiled machine code.
  • Native/direct memory: buffers, libraries, JVM structures.

StackOverflowError usually means excessive call depth. OutOfMemoryError names different exhausted areas; heap is only one possibility.

Class loading

Class loaders follow delegation rules and create type identity. The same class name loaded by different class loaders is a different runtime type. Loading, linking (verification, preparation, resolution), and initialization are distinct phases.

JIT compilation

The interpreter begins execution quickly. The JVM profiles running code and JIT compiles hot methods to optimized machine code. Optimizations may inline, eliminate allocations, specialize branches, and later deoptimize if assumptions change. Warmup matters in benchmarks.

Garbage collection

GC finds objects reachable from roots and reclaims the rest. Choose/tune a collector from pause, throughput, footprint, and heap needs. Defaults are often good. Reduce allocation or retain less only after measurement.

Diagnose

Use Java Flight Recorder, Java Mission Control, jcmd, thread dumps, heap dumps, GC logs, native memory tracking, and OS metrics. A heap dump can contain secrets and personal data; protect it.

Feynman check

The heap is a warehouse, stacks are each worker's desk, GC removes packages no reachable inventory record points to, and the JIT replaces frequently followed instructions with a faster local route.

Runtime AtlasIndependent study material · verify production details in official Java documentation