Java Memory Analyzer — a Quarkus web app that ingests a JVM GC log and renders an interactive dashboard of summary, analytics, and per-feature charts. Supports G1, Parallel, Serial, CMS, and generational ZGC logs. Built on top of the GCSee parser.
Two paths, pick whichever fits your environment.
Requires Java 25 or newer (any vendor — Temurin, Oracle, Azul, …).
- Grab the latest
gcsee-jma-<version>.jarfrom the Releases page. java -jar gcsee-jma-<version>.jar- Wait ~3 seconds for
Listening on: http://0.0.0.0:8080, then open http://localhost:8080. - Upload a GC log via the page's "Analyze" button.
Ctrl-Cto stop.
To run on a different port, pass -Dquarkus.http.port=9000 (or any
other port) before -jar. To bind only to localhost (the default
binding listens on all interfaces), pass
-Dquarkus.http.host=127.0.0.1.
No JDK needed locally — the image bundles a JRE.
docker run --rm -p 8080:8080 ghcr.io/<owner>/gcsee-jma:latest
# then open http://localhost:8080Replace <owner> with the GitHub user / org that hosts this repo
(check the URL in your browser). Images are published as multi-arch
manifests for linux/amd64 and linux/arm64, so the same tag works
on Intel and Apple-Silicon machines.
To pin to a specific release, use the version tag instead of
latest:
docker run --rm -p 8080:8080 ghcr.io/<owner>/gcsee-jma:v0.1.0To pass JVM tuning options into the container (heap size, GC
flags, etc.), use the JAVA_OPTS environment variable:
docker run --rm -e JAVA_OPTS="-Xmx2g" -p 8080:8080 ghcr.io/<owner>/gcsee-jma:latestRequires JDK 25 and Maven 3.9+.
mvn package
java -jar target/quarkus-app/quarkus-run.jarFor an uber-jar (single self-contained file, what releases ship):
mvn -Dquarkus.package.jar.type=uber-jar package
java -jar target/*-runner.jarFor dev mode with hot reload:
mvn quarkus:devReleases are cut by pushing a Git tag matching v*. The release
workflow (.github/workflows/release.yml) takes it from there:
# from a clean main with the commit you want to release
git tag v0.1.0
git push origin v0.1.0That single push triggers a workflow run that:
- Builds the uber-jar with
mvn -Dquarkus.package.jar.type=uber-jar package. - Creates (or updates) a GitHub Release at the tag, with auto-generated notes from commits since the previous tag.
- Attaches
gcsee-jma-<version>.jaras a release asset. - Builds a multi-arch container image
(
linux/amd64+linux/arm64) and pushes it toghcr.io/<owner>/gcsee-jmatagged with both the version (v0.1.0) andlatest.
Re-running a failed release is supported via the workflow's
workflow_dispatch trigger — go to the Actions tab, pick the
Release workflow, click Run workflow, and supply the tag
name.
See LICENSE.