diff --git a/jperl b/jperl index fba4ff43c..e6bbd76c0 100755 --- a/jperl +++ b/jperl @@ -31,6 +31,13 @@ fi # for native system calls (file operations, process management). JVM_OPTS="--enable-native-access=ALL-UNNAMED" +# Java 23+ warns about sun.misc.Unsafe usage (JEP 471). Add flag to suppress +# warnings from fastjson2 library. +JAVA_VERSION=$(java -version 2>&1 | head -1 | sed 's/.*version "\([0-9]*\).*/\1/') +if [ "$JAVA_VERSION" -ge 23 ] 2>/dev/null; then + JVM_OPTS="$JVM_OPTS --sun-misc-unsafe-memory-access=allow" +fi + # Note: Only include CLASSPATH if set, to avoid empty prefix that would add current dir to path if [ -n "$CLASSPATH" ]; then CP="$CLASSPATH:$JAR_PATH" diff --git a/jperl.bat b/jperl.bat index 72cd6885b..521af7b94 100755 --- a/jperl.bat +++ b/jperl.bat @@ -18,5 +18,13 @@ rem --enable-native-access=ALL-UNNAMED: Required by FFM (Foreign Function & Memo rem for native system calls (file operations, process management). set JVM_OPTS=--enable-native-access=ALL-UNNAMED +rem Java 23+ warns about sun.misc.Unsafe usage (JEP 471). Add flag to suppress +rem warnings from fastjson2 library. +for /f "tokens=3" %%v in ('java -version 2^>^&1 ^| findstr /i "version"') do ( + for /f "tokens=1 delims=." %%m in ("%%~v") do ( + if %%m GEQ 23 set JVM_OPTS=%JVM_OPTS% --sun-misc-unsafe-memory-access=allow + ) +) + rem Launch Java java %JVM_OPTS% %JPERL_OPTS% -cp "%CLASSPATH%;%SCRIPT_DIR%target\perlonjava-5.42.0.jar" org.perlonjava.app.cli.Main %*