Why are JNI calls to native methods slower than similar methods in sun.misc.Unsafe?

萝らか妹 提交于 2019-12-04 08:35:45

问题


I'm developing a JNI implementation similar to sun.misc.Unsafe but with extended memory management.

Why are the call times of native methods from sun.misc.Unsafe and from my developed library extremely different?

Some numbers:
sun.misc.Unsafe.getInt(address) takes ~1ns
when my similar method takes ~10ns

Both implementations are quite the same, following the source code of OpenJDK, just returning the variable by pointer. Both are registered in the same manner.

How can I speed up JNI calls? What makes Unsafe performance so special?

Thanks,
Yury/


回答1:


If you look for the source of the native methods in the Unsafe class you will find it does not use JNI implementations. Instead, Unsafe methods are inlined as machine code. getInt(long) for example becomes one machine code instruction.

For this reason, you can't write a JNI method which is as fast as using Unsafe, without changing the JVM so it inlines the machine code.



来源:https://stackoverflow.com/questions/7823665/why-are-jni-calls-to-native-methods-slower-than-similar-methods-in-sun-misc-unsa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!