JVMDelta is a Rust project for comparing JVM performance measurements before and after a software change. GC logs and JFR recordings can contain evidence that is tedious to inspect by hand. JVMDelta aims to make those measurements accessible locally and in CI without needing a JVM for analysis.
The current CLI inspects a narrow subset of G1 Unified GC pause summaries. It counts supported young, full, remark, and cleanup pauses, unrelated entries, and unknown pause categories. It also reports exact total, minimum, maximum, and nanosecond-rounded-down mean pause durations per category and overall. The core library exposes parsed events with exact units and source-line provenance. Invalid supported summaries fail with a line-numbered error. See supported syntax and limitations.
Comparison, regression detection, JFR parsing, JSON/HTML reports, and a GitHub Action are planned, not implemented.
crates/jvmdelta-core: bounded streaming GC parser and constant-size pause statistics; small domain modules reserve comparison, regression, and report concepts.crates/jvmdelta-cli: Clap executable, file access, counts, and exit status.tests/fixtures: synthetic edge cases and selected real Temurin 17/21 and OpenJDK 25 G1 output.docs: architecture, format support, development, and roadmap.
Requires stable Rust 1.85 or newer. Java is not required to build, test, or inspect a log.
cargo build --workspace
cargo run -p jvmdelta-cli -- --help
cargo run -p jvmdelta-cli -- --version
cargo run -p jvmdelta-cli -- gc inspect tests/fixtures/jdk25-g1-real.log
cargo run -p jvmdelta-cli -- gc inspect tests/fixtures/jdk17-g1-real.logThe installed executable is named jvmdelta. gc inspect uses strict parsing: unreadable files and malformed supported summaries exit nonzero with an error on stderr.
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
cargo build --workspace --releaseFocused issues and pull requests are welcome. Discuss new GC variants or comparison semantics before extending support. Add representative, redistributable fixtures and tests, keep errors explicit, and document limitations. Contributions are licensed under Apache-2.0.