DaCapo JVM Benchmark Suite
DaCapo is a Java benchmark suite built from real open-source applications, used to evaluate JVM, JIT, and especially garbage-collection performance. It reports warm-up and steady-state execution times across realistic workloads.
DaCapo is a widely used Java benchmark suite built from real, non-trivial open-source applications. Created by a research consortium, it was a landmark in JVM benchmarking because it replaced synthetic micro-benchmarks with genuine application workloads, giving more representative measurements for memory management and runtime research.
The suite bundles applications such as the Eclipse compiler, Apache Lucene indexing and search, the H2 database, Tomcat, Xalan XSLT processing, Avrora microcontroller simulation, and others. Each exercises realistic object allocation, data structures, and control flow, making DaCapo a standard tool in garbage-collection and JIT-compiler research as well as JVM and CPU comparison.
What It Measures
DaCapo measures execution time to complete each application's workload, distinguishing warm-up iterations from steady-state runs. It is especially valued for studying garbage-collection behavior — pause times, allocation rates, and heap pressure — because its allocation patterns resemble real software. Throughput and memory footprint are commonly derived from its runs.
Methodology
The harness runs each benchmark for several iterations in one JVM, allowing the JIT to warm up before recording steady-state times. It includes a convergence mode that repeats until run-to-run variation falls below a threshold, improving result stability. Validation checks ensure correct output. Researchers report iteration times along with JVM version, heap size, collector, and flags.
How to Interpret Results
Separate warm-up from steady-state numbers: the first iterations reflect class loading and JIT compilation, while later ones reflect optimized performance. To study collectors, run the same benchmark under different GC settings and compare pause distributions and total time. Choose benchmarks resembling your workload — Lucene for search-heavy systems, H2 for database-like access. Always fix heap size when comparing, since GC behavior is heap-sensitive.
Limitations
DaCapo runs single-JVM, single-node workloads and does not capture distributed or microservice scaling. Some bundled applications are older versions that no longer mirror current library behavior, though the suite is periodically refreshed. Results depend strongly on heap size, collector, and flags, so they reflect specific configurations. As with all benchmark suites, per-application relevance to a given production system varies.