为什么JNI对本地方法的调用比sun.misc.Unsafe中的类似方法要慢?

 2023-01-19    353  

问题描述

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

为什么来自sun.misc.unsafe和我发达的库的本机方法的呼叫时间极为不同?

为什么JNI对本地方法的调用比sun.misc.Unsafe中的类似方法要慢?

一些数字:
sun.misc.unsafe.getint(地址)〜1NS
当我的类似方法〜10ns

遵循OpenJDK的源代码,这两个实现都是完全相同的,只是通过指针返回变量.两者都以相同的方式注册.

如何加快jni呼叫?是什么使不安全的表现如此特别?

谢谢,
Yury/

推荐答案

如果您在不安全类中查找本机方法的来源,您会发现它不使用JNI实现.取而代之的是,不安全的方法被嵌入为机器代码. getInt(long)例如,成为一个机器代码指令.

因此,您无法编写与使用Unsafe一样快的JNI方法,而无需更改JVM,因此它会嵌入机器代码.

以上所述是小编给大家介绍的为什么JNI对本地方法的调用比sun.misc.Unsafe中的类似方法要慢?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/25828.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。