Glossary
The JVM memory vocabulary in one page — every term as it is used across the calculator, the analyzers and the guides.
- Reserved
- Address space the JVM claimed from the OS. It costs nothing physical — a huge reserved number (the compressed class space reserves ~1 GiB by design) is normal and harmless.
- Committed
- Memory backed by RAM or swap. This is what pressures your container limit, and the number to read in NMT output.
- RSS (Resident Set Size)
- The pages of a process actually resident in RAM, as the kernel counts them — what
kubectl top podreports. Only touched pages count, so RSS can sit below committed on a fresh JVM and above the JVM's own accounting once glibc arenas grow. - Working set
- The memory a process actively touches over a time window. Kubernetes eviction decisions use a working-set metric that excludes reclaimable page cache.
- Heap
- The garbage-collected memory where Java objects live, bounded by
-XmxorMaxRAMPercentage. The only region most dashboards show — and only part of the footprint (see the guide). - Young / old generation
- The heap split used by generational collectors: new objects start young, survivors get promoted. Serial and Parallel use a fixed ratio; G1 resizes it adaptively; generational ZGC manages it internally.
- Metaspace
- Native (off-heap) storage for class metadata, roughly ~5 KiB per loaded class. Unbounded by default; grows with classloader leaks (see the deep dive).
- Compressed class space
- A region inside the metaspace reservation that keeps class pointers 32-bit. Reserved ~1 GiB, committed tens of MiB — never add it on top of metaspace.
- Code cache
- Native memory for JIT-compiled code, growing toward
ReservedCodeCacheSize(240 MiB reserved by default with tiered compilation). - Direct memory
- Native memory for NIO buffers (Netty, file/socket I/O), capped by
MaxDirectMemorySize— which silently defaults to the heap size when unset. - Thread stack
- Per-platform-thread stack, reserved at full
-Xss(1 MiB default) but committed only as touched (typically 40–120 KiB). Virtual threads store stacks on the heap instead (see the guide). - GC structures
- Collector-internal native memory: card tables, remembered sets, region metadata, relocation data. Scales with heap size and differs per collector (~1% Serial to ~6% ZGC).
- NMT (Native Memory Tracking)
- The JVM's own accounting of every byte it allocates, per subsystem. Enable with
-XX:NativeMemoryTracking=summary, capture withjcmd, analyze with the NMT Analyzer. - cgroup memory limit
- The kernel-enforced ceiling for a container (
resources.limits.memoryin Kubernetes,mem_limitin Compose). The JVM reads it for its ergonomics, includingMaxRAMPercentage. - OOMKilled vs OutOfMemoryError
- Exit 137 /
OOMKilledis the kernel killing the container for exceeding its limit — no stack trace.java.lang.OutOfMemoryErroris the JVM refusing an allocation against its own caps. Different culprits, different fixes (see the checklist). - Headroom
- An explicit safety percentage on top of the modeled JVM footprint, covering what no model sees: glibc malloc arenas, JNI allocations, native spikes. The calculator defaults to 15%.
- MaxRAMPercentage
- Sizes the heap as a percentage of the cgroup limit — one source of truth, but only safe when the percentage is computed for that specific limit (see the guide).