Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@headius
Copy link
Member

@headius headius commented Oct 24, 2025

This PR will address warnings produced when we attempt to access native memory using Unsafe or load native libraries.

The Unsafe accesses should eventually be replaced by Panama FFM calls, but for now we just avoid using Unsafe at all when we are running on JDK 23 or higher (the level at which they started to warn more noisily).

The native library load obviously can't be eliminated, but we will modify the jar file to request native access when run as an unnamed module, and when run as a module (either as part of a jar as in JRuby or as a standalone module) the specified command-line flag will probably remain necessary.

This avoids warnings when using Unsafe methods to do native
memory access. These operations will instead use JNI to access
native memory, and eventually Java's FFM APIs for better
performance.

Fixes jnr#165 by avoiding Unsafe
when on JDK 23 or higher.

See jruby/jruby#8696 for some prior
discussion about these warnings.
@headius headius linked an issue Oct 24, 2025 that may be closed by this pull request
@headius
Copy link
Member Author

headius commented Oct 24, 2025

Additional information about enabling native access...

There is a module method here that can do it, but only if the caller has native access already enabled: https://docs.oracle.com/en/java/javase/24/docs/api/java.base/java/lang/ModuleLayer.Controller.html#enableNativeAccess(java.lang.Module)

There's a manifest entry that can be used to enable native access to all unnamed modules (all classpath code) but it is only honored from the main jar (e.g. JRuby's main jar could include this for running directly).

@headius headius merged commit 75456d5 into jnr:master Oct 24, 2025
10 checks passed
@headius headius deleted the no_unsafe_jdk23 branch October 24, 2025 19:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Replace deprecated Unsafe API

1 participant