Developer Guides
This page links repeatable maintainer workflows that do not fit naturally into user documentation.
Run JMH benchmarks
The current JMH runner lives in the benchmarks module.
Build the runner:
Run one benchmark:
Run a smoke profile:
python3 benchmarks/scripts/run_jmh_profile.py \
--repo-root . \
--profile segment-index-pr-smoke \
--output-dir /tmp/hestia-bench/current
Compare two profile runs:
python3 benchmarks/scripts/compare_jmh_profile.py \
--baseline /tmp/hestia-bench/base/summary.json \
--candidate /tmp/hestia-bench/current/summary.json \
--markdown-out /tmp/hestia-bench/comparison.md \
--json-out /tmp/hestia-bench/comparison.json
Use benchmarks/README.md for the full benchmark matrix and supported profiles.
Profile a long-running workload
For profiling storage behavior, prefer a workload that runs long enough to make allocation, locking, and I/O visible in a profiler.
- attach a profiler to the benchmark runner or to a representative integration test
- keep the workload stable across comparisons
- capture both CPU and allocation views when evaluating regressions
See JVM Profiling for profiler interpretation notes.
Mockito and modules
Mockito may require reflective access to JDK internals in modular test setups:
Apply the flag only where the test environment actually needs it.