Compare HashMap vs Chronicle Map memory footprint
masterThis document provides a benchmark comparison between a standard on-heap java.util.HashMap and an off-heap Chronicle Map using JOL (Java Object Layout) to measure memory overhead.
Key Findings
- Java
HashMap(on-heap): High overhead due to per-entryHashMap.Nodeobjects, object headers, padding, and GC pressure. Average overhead is approximately 40 B per entry. - Chronicle Map (off-heap): Significantly lower overhead by serializing data contiguously into a direct-memory slab. Average overhead is approximately 15 B per entry.
Comparison Summary (for 1 million String → String pairs)
| Metric | Java HashMap | Chronicle Map |
|---|---|---|
| Total Size | ~130 MiB | ~28 MiB |
| Avg. Overhead / Entry | 40 B | 15 B |
| Map implementation | Total size | Logical data¹ | Structural overhead | Avg. overhead / entry |
|--------------------|-----------:|--------------:|---------------------:|----------------------:|
| **Java `HashMap` (on‑heap)** | **136 388 672 B** (≈ 130 MiB) | 96 000 000 B | 40 388 672 B | 40 B |
| **OpenHFT Chronicle Map (off‑heap)** | **29 396 992 B** (≈ 28 MiB) | 13 777 812 B | 15 619 180 B | 15 B |