哪种方法是从Java调用本机库的最快方法?
我所知道的是
答案 0 :(得分:12)
Swig也使JNI更容易。
就速度而言,我怀疑会有微妙的变化 - 我强烈建议你选择一个你知道你会做很多的电话,并对所提供的所有解决方案进行基准测试。
答案 1 :(得分:10)
JNI是最快的。与JNI相比,JNA非常慢(调用开销可能只有一个数量级),但它是一个很棒的库,因为它使本机访问变得如此简单。如果你需要偶尔调用一些原生API,JNA是很棒的。如果你关心性能,我不会在任何“紧密循环”中使用它。
我不确定NativeCall在频谱中的位置。
答案 2 :(得分:3)
相当多的参数会影响编程语言之间接口的性能:JVM运行的设备,开发者是谁(如果它不是通常的Sun JVM),是否需要从本机代码回调Java代码,操作系统上JVM的线程模型以及本机代码的异步性......
我可能找不到可靠的基准来衡量您的需求,我担心。
答案 3 :(得分:2)
This blog entry声称由于JNA使用的内省机制,它将明显慢于JNI。我怀疑NativeCall将使用类似的机制,因此以类似的方式执行。
但是,您应该根据您在Java和C之间引用和/或编组的特定对象进行基准测试。
我会赞同SWIG的建议。这使得Java / C接口的生活变得特别容易(更容易)。