#!/usr/bin/env bash # What does the switch cost on a machine that used to get Serial? 1 CPU, 2 GB, three runs each. # Timing is indicative only: one shared machine, one process per run. Read the SHAPE, not the digits. # ./scripts/g1-cost.sh -> docs/output/04-g1-cost-1cpu.txt (4000 batches, ~6-8 s per run) # BATCHES=400 OUTNAME=05-g1-cost-1cpu-short.txt ./scripts/g1-cost.sh (a short-lived process, e.g. a CI job) set -euo pipefail source "$(dirname "$0")/env.sh" BUILD="$ROOT/build/g1"; mkdir -p "$BUILD" "$JDK27/bin/javac" --release 26 -d "$BUILD" "$ROOT"/g1-container/src/*.java RUNS="${RUNS:-3}"; BATCHES="${BATCHES:-4000}"; OUTNAME="${OUTNAME:-04-g1-cost-1cpu.txt}" { echo "# Allocation workload, 1 CPU / 2 GB container, $BATCHES batches x 50,000 objects, $RUNS runs per configuration (indicative, not a benchmark)" echo "# 'default' means nobody passed a collector flag." echo for cfg in "$IMG26|" "$IMG27|" "$IMG27|-XX:+UseSerialGC"; do img="${cfg%%|*}"; flag="${cfg##*|}" for i in $(seq 1 "$RUNS"); do echo "=== $img ${flag:-default} run $i" docker run --rm --cpus=1 --memory=2g -v "$BUILD:/app:ro" "$img" \ java $flag -cp /app Workload "$BATCHES" | grep -v -E '^allocated' done echo done } > "$OUT/$OUTNAME" 2>&1 cat "$OUT/$OUTNAME"