strings: Java Strings deep dive companion code (pool/intern, indy concat vs StringBuilder JMH, text blocks, string templates)
Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01KqJyCidz3ZgRyHABv2GVJh
This commit is contained in:
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user