Performance overhead JNI vs Java vs Native C
我对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结果),投资任何时间来"优化"这一点是没有意义的。请研究"过早优化",并了解在整个应用程序的上下文中,此特定操作可能无关紧要。
- @吉米加里森绝对是。以携带本地图书馆为代价只需几纳秒?不值得。
lexicore suggested:asP></
how to create a proper check for Java的解决方案,在这里你的基准。
然后跟踪和标杆方案实施"订单the found in the first的答案在这里。
as a端和从已知的个人经验的重要因素involved are there many of the决策制作中使用JNI的Java解决方案或过一过,IPC解决方案与C / C + +客户端的过程。P></
example的考虑:P></
invocations how many are expected of the API吗?
is this that should be重构遗留代码和新的解决方案?
这是安的实际交易时,临界optimized that should be?
is the solution is expected to change or en盎司多,去努力?
Do not make the JNI的C / C + +或IPC的选择轻。there is here在大量相关。P></
他java' & Do not that s JIT编译可以工作的奇迹,与多invocations(marked this method台与C / C + +和S是在长期java'很惊讶,amortized速度与C / C + +)。P></
再见!P></