#!/usr/bin/env bash # Regenerates every file in ../output/. Requires JDK25_HOME. set -euo pipefail [[ -z "${JDK25_HOME:-}" ]] && { echo "JDK25_HOME must be set" >&2; exit 1; } cd "$(dirname "$0")/.." OUT=output; mkdir -p "$OUT" export JAVA_HOME="$JDK25_HOME" mvn -q -f ../pom.xml -pl strings -am package J="$JDK25_HOME/bin/java" run() { echo "==> $1"; "$J" -cp target/classes "com.ankurm.strings.$1" 2>&1 | grep -v "Picked up" > "$OUT/$2"; } run StringPoolDemo 01-string-pool.txt run TextBlockDemo 02-text-blocks.txt run ConcatLoopDemo 03-concat-loop.txt echo "==> javap: indy vs inline StringBuilder" SRC=src/main/java/com/ankurm/strings/ConcatShapes.java rm -rf /tmp/cs-indy /tmp/cs-inline "$JDK25_HOME/bin/javac" -d /tmp/cs-indy "$SRC" 2>&1 | grep -v "Picked up" || true "$JDK25_HOME/bin/javac" -XDstringConcat=inline -d /tmp/cs-inline "$SRC" 2>&1 | grep -v "Picked up" || true { echo '$ javac ConcatShapes.java && javap -c -p ConcatShapes (method one)' "$JDK25_HOME/bin/javap" -c -p -cp /tmp/cs-indy com.ankurm.strings.ConcatShapes 2>&1 | grep -v "Picked up" | sed -n '/String one/,/^$/p' echo '$ javac -XDstringConcat=inline ConcatShapes.java && javap -c -p ConcatShapes (method one)' "$JDK25_HOME/bin/javap" -c -p -cp /tmp/cs-inline com.ankurm.strings.ConcatShapes 2>&1 | grep -v "Picked up" | sed -n '/String one/,/^$/p' } > "$OUT/04-javap-indy-vs-inline.txt" { echo '$ javap -c -v ConcatShapes | grep -A3 BootstrapMethods' "$JDK25_HOME/bin/javap" -v -p -cp /tmp/cs-indy com.ankurm.strings.ConcatShapes 2>&1 | grep -v "Picked up" | grep -A4 '^BootstrapMethods' } > "$OUT/05-bootstrap-method.txt" echo "==> StringTemplate (expected compile failures)" { echo '$ javac StringTemplate.java' "$JDK25_HOME/bin/javac" -d /tmp/lc src/broken/StringTemplate.java 2>&1 | grep -v "Picked up" || true echo; echo '$ javac --enable-preview --release 25 StringTemplate.java' "$JDK25_HOME/bin/javac" --enable-preview --release 25 -d /tmp/lc src/broken/StringTemplate.java 2>&1 | grep -v "Picked up" || true } > "$OUT/06-string-template-compile-error.txt" echo "==> JVM string flags" "$J" -XX:+PrintFlagsFinal -version 2>/dev/null | grep -E " (StringTableSize|UseStringDeduplication|CompactStrings|OptimizeStringConcat) " | sed 's/ */ /g' > "$OUT/07-jvm-flags.txt" echo "==> JMH" "$J" -jar target/benchmarks.jar 'ConcatBenchmark|LoopConcatBenchmark' -rf text -rff "$OUT/08-jmh-raw.txt" 2>&1 | grep -v "Picked up" > /dev/null cp target/surefire-reports/com.ankurm.strings.StringBehaviourTest.txt "$OUT/09-tests.txt" echo Done