从 Java 调用本机库的最快方法是什么?
我所知道的是
- NativeCall - 我们目前使用的
- JNA - 没用过,但看起来很合理
- JNI - 看起来写起来很可怕,但如果我们得到速度,我们会这样做
从 Java 调用本机库的最快方法是什么?
我所知道的是
Swig也使 JNI 更容易。
在速度方面,我怀疑会有细微的变化——我强烈建议你选择一个你知道你会做很多事情的电话,并对提供的所有解决方案进行基准测试。
JNI 是最快的。JNA 与 JNI 相比非常慢(调用开销可能是一个数量级),但它是一个很棒的库,因为它使本地访问变得如此简单。如果您需要偶尔调用一些本机 API,JNA 非常棒。如果您关心性能,我不会在任何“紧密循环”中使用它。
我不确定 NativeCall 在频谱中的位置。
相当多的参数会影响编程语言之间接口的性能:JVM 运行在什么设备上,谁开发了它(如果它不是通常的 Sun JVM),是否需要从本机代码回调 Java 代码,线程模型您的操作系统上的 JVM 以及本机代码的异步程度...
恐怕您可能找不到可靠的基准来准确衡量您的需求。