JNI和C的Java包装器有什么区别

时间:2013-06-10 15:06:57

标签: java java-native-interface javacv

我正在使用JNI来加速我的程序。就像这样:

JNIEXPORT void JNICALL SOME_FUNCTION(JNIEnv * jenv, jclass, jlong thiz)
{
  ...
}

这里java程序将c中的对象地址发送到c中,并启动c二进制文件。

虽然我知道直接执行native很快,但我仍然对JNI和java包装器之间的区别感到困惑。因为据我所知,java包装器还在将RAM地址发送到C二进制文件中。

内在的差异是什么使他们的效率不同?

以下是可能有助于您回答的插图。

“java wrapper”,我指的是像JavaCV

这样的东西

JNI illustration

2 个答案:

答案 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二进制文件。