我是JNI(或母语编程)的新手,非常感谢您提供帮助。这是我正在尝试做的事情以及执行时间。
我试图找到大小为100,000,000的双精度数组元素的总和,并试图让JNI更快地获得它。
对于Java(纯Java),它需要154ms 对于C(纯C),需要0 ms 对于JNI(Java调用Native C),需要800 ms
我知道JNI会有自己的性能开销,但是我只需要花费时间来执行JNIEXPORT jdouble JNICALL Java_Sample1_sum
1 ms
(即在控件进入之后和之前离开此求和方法),所以我的问题是JNI是如此之慢,以至于调用JNI本身需要大约799毫秒,即下面的块需要800 ms
start = System.currentTimeMillis();
sample.sum(doubleArray);
end = System.currentTimeMillis();
如果这对答案没有帮助,我可以分享我的整个代码。另外,我搜索了有关优化JNI的信息。
答案 0 :(得分:1)
正如lexicore建议:
作为旁注和个人经验 - 决定使用JNI解决方案而不是使用Java,或者使用带有C / C ++端流程的IPC解决方案时,有许多重要因素。
示例注意事项:
不要轻易选择JNI或IPC C / C ++。这里有很大的开销。
并且不要忘记Java的即时编译可以通过多个方法调用来创建奇迹(我用c / c ++标记了这一点,并且对java的长期,摊销速度与c / c ++相比感到惊讶)。
祝你好运!