From 8e0ff0d349abd274d8cb95c1ba5ca5397108b4ff Mon Sep 17 00:00:00 2001 From: "Flavio S. Glock" Date: Thu, 26 Mar 2026 16:00:11 +0100 Subject: [PATCH] fix: suppress fastjson2 Unsafe deprecation warnings on Java 23+ Add --sun-misc-unsafe-memory-access=allow JVM option to suppress warnings about fastjson2 using deprecated sun.misc.Unsafe methods. These warnings appear on Java 23+ (JEP 471) when using JSON module: WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by com.alibaba.fastjson2.util.JDKUtils The flag is only added when Java version >= 23, since the option does not exist in Java 22. Updated both jperl (Unix) and jperl.bat (Windows) launchers. Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- jperl | 7 +++++++ jperl.bat | 8 ++++++++ 2 files changed, 15 insertions(+) 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 %*