性能开销JNI vs Java vs Native C.

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。


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></