首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >性能开销JNI vs Java与本机C

性能开销JNI vs Java与本机C
EN

Stack Overflow用户
提问于 2018-04-13 18:48:14
回答 1查看 3.3K关注 0票数 1

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

EN

回答 1

Stack Overflow用户

发布于 2018-04-13 19:11:17

正如lexicore所建议的:

  1. 检查如何为您的java解决方案here创建适当的基准测试。
  2. 然后,遵循并实现在第一个答案here中找到的工作台标记解决方案。

顺便提一下,根据个人经验,在决定在Java上使用JNI解决方案还是使用C/C++侧进程的IPC解决方案时,涉及到许多重要的因素。

举例考虑:

  1. 需要调用多少次API?
  2. 这是应该重构的遗留代码还是新的解决方案?
  3. 这是一个需要优化的实际的、时间关键的事务吗?
  4. 该解决方案是否会发生很大变化,还是一次尝试?

不要轻易选择JNI或IPC C/C++。这里有一个很大的开销。

而且不要忘记,java的及时编译可以在多个方法调用中产生奇迹(我将此标记为c/c++,并对java的长期、摊销速度和c/c++感到惊讶)。

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49823418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档