JNR does some tricks to spin native code at runtime to call the native function with less transition time.
I wonder how that is actually possible right now. I mean for any native library, be it JNR or anything else, there is _only_ JNI to bridge the gap between Java and native.
Even JNR _must_ use JNI to go from Java to native - whether or not that native is statically compiled or dynamically generated during runtime.
I see JNR only as a Java-friendly way to declare native functions and structures, and thusly it can be the basis for Project Panama on the API-side.
But on the inside, right now as it stands, it just - as any other JNI bridge - has to use JNI somewhere along the road to call into native.
Surely on the inside this will change with Project Panama.