我对JNI(或本机语言编程)不太熟悉,希望能得到任何帮助。以下是我要做的,以及执行时间。
我试图找到100000000大小的两倍数组元素的总和,并试图让JNI更快地得到它。
对于Java(纯Java),它需要154MS。对于C(纯C),需要0 ms对于JNI(Java调用原生C),需要800毫秒
我知道JNI有它自己的性能开销,但是我花了一些时间来执行JNIEXPORT jdouble JNICALL Java_Sample1_sum,只执行1 ms(即,在控件进入之后,在它离开这个sum方法之前),所以我的问题是JNI太慢,调用JNI本身需要799毫秒,即下面的块占用800 ms。
start = System.currentTimeMillis();
sample.sum(doubleArray);
end = System.currentTimeMillis();
如果这对回答没有帮助,我可以共享整个代码。此外,我还搜索了优化JNI。
首先,请参阅:stackoverflow.com/questions/504103/…
你有0毫秒的时间来求和C中的一组双精度数?我简直不敢相信…
然后参见:stackoverflow.com/questions/13973035/…
最后,为什么您关心每次迭代几纳秒的样子?如果普通Java可以在154MS中加1亿倍(我不相信C结果),投资任何时间来"优化"这一点是没有意义的。请研究"过早优化",并了解在整个应用程序的上下文中&#x