Install
$ agentstack add skill-umit-skills-jmh ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
JMH — trustworthy Java microbenchmarks
Workflow
- Pre-flight before running — read
references/pitfalls.mdand apply its 15-point checklist to the benchmark source. Catch DCE, constant folding, missingBlackhole,@Fork(0),@Warmup < 5,finalconstants in the op, missing@State, raw loops without@OperationsPerInvocation. Most "fast" results come from broken benchmarks; catching this before running saves hours. - Identify the build system — Maven (
pom.xmlwithjmh-core) or Gradle (me.champeau.jmhplugin). Setup differs; running differs. Seereferences/maven.mdorreferences/gradle.md. - Pick the right
Mode—Throughputfor ops/sec,AverageTimefor ns/op,SingleShotTimefor cold-path / startup,SampleTimefor distribution (p50/p99). Wrong mode → wrong question answered. Seereferences/modes.md. - Write the benchmark — annotate class with
@State(Scope.Benchmark),@BenchmarkMode,@OutputTimeUnit,@Fork(value=3, jvmArgs={"-Xmx2g","-Xms2g"}),@Warmup(iterations=5),@Measurement(iterations=10). Every@Benchmarkmethod either returns a value or takes aBlackholeparameter. Use@Paramfor matrices instead of separate methods. - Re-check the source against the checklist after edits.
- Run with profilers attached — never run benchmarks without
-prof gc(allocation rate context) and ideally-prof async:output=flamegraph(flame graph per benchmark). Seereferences/profilers.md. - Output JSON (
-rf json -rff results.json) — never trust the console table alone; JSON is what diffing and visualization tools consume. - Analyze — drag
results.jsonto https://jmh.morethan.io for charts, or use Bencher/Codspeed in CI for continuous diff. Seereferences/analysis.md. - Report with confidence intervals — JMH prints
Score ± Error (99.9%). Two means are not different if their confidence intervals overlap. Don't claim "10% faster" inside the noise band.
Quick reference
# Maven — build + run a single benchmark class
mvn clean verify -DskipTests
java -jar target/benchmarks.jar MyBench -wi 10 -i 10 -f 3 -prof gc -rf json -rff result.json
# Gradle (me.champeau.jmh plugin) — run all benchmarks in jmh source set
./gradlew jmh
# Run only matching benchmarks (regex)
java -jar target/benchmarks.jar 'com\.acme\..*Hash.*'
# Profile per-benchmark with async-profiler
java -jar target/benchmarks.jar MyBench -prof async:output=flamegraph;dir=profiles
Common modes
| Mode | Unit | When | | --- | --- | --- | | Throughput | ops/time | "how many per second" — default for hot-path code | | AverageTime | time/op | "how long per call" — typical for latency-sensitive ops | | SampleTime | time/op (sampled) | distribution incl. p50/p95/p99 — outlier-aware | | SingleShotTime | time/op (one-shot, no warmup-loop) | cold start, init code, single-event measurement |
References
| File | When to read | | --- | --- | | references/intro.md | Read first — what JMH is, why naive benchmarks lie, minimal example, how to read the score table + GC columns + percentiles, golden-default checklist | | references/pitfalls.md | Always before reviewing/writing a benchmark — 15 antipatterns (DCE, constant folding, false sharing, etc.) + 15-point pre-flight checklist + minimal correct template | | references/maven.md | Maven pom.xml setup, archetype, run command, multi-module projects | | references/gradle.md | me.champeau.jmh plugin config, jmh {} block, source set, IDE integration | | references/modes.md | Mode + State + Scope + @OperationsPerInvocation deep dive | | references/profilers.md | -prof gc, -prof async, -prof perfasm, -prof jfr, -prof stack — when to use which | | references/analysis.md | JSON schema, jmh.morethan.io, statistical interpretation, CI integration (Bencher, Codspeed) |
Output format
- Raw run: console table +
result.json(always emit JSON with-rf json -rff). - For sharing: upload JSON to https://jmh.morethan.io and share the URL.
- For CI: integrate with Bencher (
bencher run) or Codspeed (codspeed run); both have JMH adapters. - For deep analysis: pair with
async-profilerJFR per benchmark; render flame graphs withjfrconv.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: umit
- Source: umit/skills
- License: MIT
- Homepage: https://umitunal.net/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.