我对JNI (或本地语言编程)很陌生,希望在这方面提供任何帮助。这是我想要做的,以及执行的时间。
我试图找到大小为100,000,000倍的数组元素的和,并试图使JNI更快地得到它。
对于Java (纯Java),C(纯C)需要154 ms,JNI (Java调用本地C)需要0 ms,需要800 ms
我知道JNI有它自己的性能开销,但是我需要花费时间只执行JNIEXPORT jdouble JNICALL Java_Sample1_sum
1 ms
(即在控件进入之后,在它离开这个和方法之前),所以我的问题是JNI太慢以至于调用JNI本身需要大约799 ms,即下面的块接受800 ms
start = System.currentTimeMillis(); sample.sum(doubleArray); end = System.currentTimeMillis();
如果这对回答没有帮助的话,我可以分享我的全部代码。另外,我还搜索了如何优化JNI。
发布于 2018-04-13 19:11:17
正如lexicore所建议的:
顺便提一下,根据个人经验,在决定在Java上使用JNI解决方案还是使用C/C++侧进程的IPC解决方案时,涉及到许多重要的因素。
举例考虑:
不要轻易选择JNI或IPC C/C++。这里有一个很大的开销。
而且不要忘记,java的及时编译可以在多个方法调用中产生奇迹(我将此标记为c/c++,并对java的长期、摊销速度和c/c++感到惊讶)。
祝好运!
https://stackoverflow.com/questions/49823418
复制相似问题