JAVA jni和C效率对比_性能开销JNI vs Java vs Native C.

博主探讨了在JAVA中使用JNI调用C代码进行大规模数组求和运算的效率问题。纯Java实现耗时154MS,纯C实现耗时0MS,而JNI方式耗时800MS,其中JNI调用开销占据了大部分时间。社区建议关注整体应用性能而非过度优化,并提醒考虑JNI使用的适用场景,如预期API调用次数、代码重构需求等。Java的JIT编译在多次调用后也能提供接近C/C++的性能。
摘要由CSDN通过智能技术生成

我对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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值