我正在使用JNI来加速我的程序。就像这样:
JNIEXPORT void JNICALL SOME_FUNCTION(JNIEnv * jenv, jclass, jlong thiz)
{
...
}
这里java程序将c中的对象地址发送到c中,并启动c二进制文件。
虽然我知道直接执行native很快,但我仍然对JNI和java包装器之间的区别感到困惑。因为据我所知,java包装器还在将RAM地址发送到C二进制文件中。
内在的差异是什么使他们的效率不同?
以下是可能有助于您回答的插图。
“java wrapper”,我指的是像JavaCV
这样的东西
答案 0 :(得分:0)
JavaCV在其实现中使用JNI。
JNI是一个提供C API的工具。 JavaCV是一个使用JNI在Java API中公开C API的包装器。
JNI允许Java代码调用本机代码,反之亦然。
JavaCV使您可以轻松使用Java中的本机计算机视觉库。如果您browse its source code,您可以看到JNI本机方法在其实现中使用。
答案 1 :(得分:0)
包装器是一个JNI接口,它通过声明调用C / C ++函数的本机Java方法将C / C ++库包装到Java中。 此外,JNI不启动 c二进制文件,Java虚拟机是进行本机调用的C二进制文件。