#!/usr/bin/env bash # Regenerates every file in output/. Set J25, J27, J28 to the three JDK home directories. # Timing results drift between runs and machines; treat them as indicative, not exact. set -u HERE="$(cd "$(dirname "$0")" && pwd)" OUT="$HERE/../output"; mkdir -p "$OUT" : "${J25:?}" "${J27:?}" "${J28:?}" export JDK_CLIENT="$J25" RUNS=${RUNS:-5} # 01 - what does each JDK say about the ZGC flags the two JEPs talk about? { for p in "25|$J25" "27|$J27" "28-ea|$J28"; do v=${p%%|*}; h=${p#*|} echo "== JDK $v" "$h/bin/java" -version 2>&1 | grep -v Picked | sed -n 1p "$h/bin/java" -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:+PrintFlagsFinal -version 2>&1 \ | grep -E ' (InitialHeapSize|MaxHeapSize|SoftMaxHeapSize|ZUncommit|ZUncommitDelay) ' | sed 's/ \{2,\}/ /g' echo "-- probing -XX:+ZAdaptiveHeapSizing" "$h/bin/java" -XX:+UseZGC -XX:+ZAdaptiveHeapSizing -version 2>&1 | grep -v Picked | sed -n 1p echo done } > "$OUT/01-flag-probe.txt" # 02 - startup versus initial heap size { for p in "jdk25|$J25" "jdk27|$J27" "jdk28ea|$J28"; do l=${p%%|*}; h=${p#*|} "$HERE/startup.sh" "$h" "$l zgc default" "$RUNS" -XX:+UseZGC "$HERE/startup.sh" "$h" "$l zgc Xms64m" "$RUNS" -XX:+UseZGC -Xms64m "$HERE/startup.sh" "$h" "$l zgc Xms1g" "$RUNS" -XX:+UseZGC -Xms1g "$HERE/startup.sh" "$h" "$l zgc Xms3g" "$RUNS" -XX:+UseZGC -Xms3g "$HERE/startup.sh" "$h" "$l zgc Xms3g pretouch" "$RUNS" -XX:+UseZGC -Xms3g -XX:+AlwaysPreTouch done } > "$OUT/02-startup-vs-xms.txt" 2>&1 # 03 - warmup: how long do the first 20,000 requests take? { for p in "jdk25|$J25" "jdk28ea|$J28"; do l=${p%%|*}; h=${p#*|} "$HERE/warmup.sh" "$h" "$l zgc default" -XX:+UseZGC "$HERE/warmup.sh" "$h" "$l zgc Xms3g" -XX:+UseZGC -Xms3g "$HERE/warmup.sh" "$h" "$l zgc Xms64m" -XX:+UseZGC -Xms64m done } > "$OUT/03-warmup.txt" 2>&1