为什么JNI调用本机方法比sun.misc.Unsafe中的类似更慢

时间:2011-10-19 15:20:49

标签: java performance java-native-interface unsafe

我正在开发类似于sun.misc.Unsafe的JNI实现,但具有扩展内存管理。

如何从sun.misc.Unsafe和我开发的库中解释本机方法的调用时间是非常不同的?

有些数字: sun.misc.Unsafe.getInt(地址)需要〜1ns 当我的类似方法需要~10ns

两个实现完全相同,遵循openJDK的源代码,只是通过指针返回变量。在JNI模块中不安全,以与其他模式相同的方式注册。

如何加快JNI通话?是什么让Unsafe对性能如此特别?

谢谢, 尤里/

1 个答案:

答案 0 :(得分:9)

如果您在Unsafe类中查找本机方法的源代码,您会发现没有JNI实现。相反,不安全方法被内联为机器代码。例如,getInt(long)成为一个机器代码指令。

因此,您无法编写与使用Unsafe一样快的JNI方法,而无需更改JVM以便内联机器代码。