0

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

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

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

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

是什么内在差异使它们在效率上有所不同?

以下是一个可以帮助您回答的插图。

“java wrapper”是指 JavaCV 之类的东西

JNI 插图

4

2 回答 2

0

JavaCV 在其实现中使用 JNI。

JNI 是一个提供 C API 的工具。JavaCV 是一个包装器,它使用 JNI 在 Java API 中公开 C API。

JNI 允许 Java 代码调用本机代码,反之亦然。

JavaCV 使得使用 Java 中的本地计算机视觉库变得很容易。如果您浏览它的源代码,您可以看到在其实现中使用了 JNI 原生方法。

于 2013-06-10T15:17:13.793 回答
0

包装器是一个 JNI 接口,它通过声明调用 C/C++ 函数的本机 Java 方法将 C/C++ 库包装到 Java。此外,JNI 不会启动ac 二进制文件,Java 虚拟机是进行本机调用的 C 二进制文件。

于 2013-06-10T15:17:42.437 回答