Improve shebang script

Change-Id: If3c160532ef48d731c735885beda97cc7080fd36
diff --git a/korapxmltool.shebang b/korapxmltool.shebang
index d0590ee..6f8befc 100644
--- a/korapxmltool.shebang
+++ b/korapxmltool.shebang
@@ -1,16 +1,68 @@
 #!/usr/bin/env bash
-# Shebang header for korapxmltool to auto-enable native access on Java 25+
+# Shebang header for korapxmltool: auto-enables native access (Java 25+) and chooses a default -Xmx.
 # Usage:
 #   cat korapxmltool.shebang app/build/libs/korapxmltool.jar > korapxmltool
 #   chmod +x korapxmltool
 # (Run `zip -A korapxmltool` if your unzip/java complains about prepended bytes.)
+#
+# Override memory:
+#   export KORAPXMLTOOL_XMX_MB=8192          # sets -Xmx8192m
+#   export KORAPXMLTOOL_JAVA_OPTS="... -Xmx4g"  # full custom opts
+# Otherwise we pick ~75% of detected memory (cgroup aware), clamped to [1024m, 65536m].
 
 set -euo pipefail
 
-# Add native access flag if not already present
+has_xmx=false
+for v in "${JDK_JAVA_OPTIONS:-}" "${JAVA_TOOL_OPTIONS:-}" "${KORAPXMLTOOL_JAVA_OPTS:-}"; do
+  [[ $v == *"-Xmx"* ]] && has_xmx=true && break
+done
+for arg in "$@"; do
+  [[ $arg == -Xmx* ]] && has_xmx=true && break
+done
+
+detect_mem_limit_mb() {
+  local cgroup_limit
+  if [[ -f /sys/fs/cgroup/memory.max ]]; then
+    cgroup_limit=$(< /sys/fs/cgroup/memory.max)
+    [[ $cgroup_limit == "max" ]] && cgroup_limit=""
+  elif [[ -f /sys/fs/cgroup/memory/memory.limit_in_bytes ]]; then
+    cgroup_limit=$(< /sys/fs/cgroup/memory/memory.limit_in_bytes)
+  fi
+
+  local limit_mb=""
+  if [[ -n ${cgroup_limit:-} && $cgroup_limit =~ ^[0-9]+$ && $cgroup_limit -lt 9223372036854771712 ]]; then
+    limit_mb=$(( cgroup_limit / 1024 / 1024 ))
+  fi
+
+  local memtotal_kb
+  memtotal_kb=$(awk '/MemTotal/ { print $2; exit }' /proc/meminfo 2>/dev/null || echo "")
+  local total_mb=""
+  if [[ $memtotal_kb =~ ^[0-9]+$ ]]; then
+    total_mb=$(( memtotal_kb / 1024 ))
+  fi
+
+  if [[ -n $limit_mb && -n $total_mb ]]; then
+    (( limit_mb < total_mb )) && echo "$limit_mb" || echo "$total_mb"
+  else
+    echo "${limit_mb:-${total_mb:-4096}}"
+  fi
+}
+
 EXTRA_OPTS=()
 if [[ "${JDK_JAVA_OPTIONS:-}" != *"--enable-native-access="* ]]; then
   EXTRA_OPTS+=(--enable-native-access=ALL-UNNAMED)
 fi
 
-exec java "${EXTRA_OPTS[@]}" -jar "$0" "$@"
+if ! $has_xmx; then
+  if [[ -n ${KORAPXMLTOOL_XMX_MB:-} && ${KORAPXMLTOOL_XMX_MB:-} =~ ^[0-9]+$ ]]; then
+    xmx_mb=${KORAPXMLTOOL_XMX_MB}
+  else
+    mem_mb=$(detect_mem_limit_mb)
+    xmx_mb=$(( mem_mb * 75 / 100 ))
+    (( xmx_mb < 1024 )) && xmx_mb=1024
+    (( xmx_mb > 65536 )) && xmx_mb=65536
+  fi
+  EXTRA_OPTS+=("-Xmx${xmx_mb}m")
+fi
+
+exec java "${EXTRA_OPTS[@]}" ${KORAPXMLTOOL_JAVA_OPTS:-} -jar "$0" "$@"