gpt4 book ai didi

java - 性能开销 JNI vs Java vs Native C

转载 作者:行者123 更新时间:2023-11-30 14:49:13 25 4
gpt4 key购买 nike

我是 JNI(或 native 语言编程)的新手,非常感谢这方面的任何帮助。这是我正在尝试做的事情以及执行时间。

我正在尝试查找大小为 100,000,000 的 double 的数组元素之和,并尝试让 JNI 更快地获得它。

对于Java(纯Java),需要154ms对于C(纯C),需要0毫秒对于JNI(Java调用Native C),需要800毫秒

我知道 JNI 会有自己的性能开销,但我花时间执行 JNIEXPORT jdouble JNICALL Java_Sample1_sum1 ms (即在控件进入之后和离开此 sum 方法之前),所以我的问题是 JNI 太慢以至于调用 JNI 本身需要大约 799 毫秒,即以下 block 需要 800 ms

start = System.currentTimeMillis();
sample.sum(doubleArray);
end = System.currentTimeMillis();

如果这对回答没有帮助,我可以分享我的整个代码。另外,我还搜索过有关优化 JNI 的信息。

最佳答案

lexicore建议:

  1. 检查如何为您的 Java 解决方案创建适当的基准 here .
  2. 然后遵循并实现第一个答案 here 中找到的基准测试解决方案.

作为旁注并根据个人经验 - 决定使用 JNI 解决方案而不是 Java,还是使用带有 C/C++ 侧进程的 IPC 解决方案涉及许多重要因素。

注意事项示例:

  1. 预计会调用多少次 API?
  2. 这是应该重构的旧代码还是新的解决方案?
  3. 这是一个实际的、时间紧迫的事务,应该进行优化吗?
  4. 该解决方案预计会发生很大变化,还是一次性的努力?

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

并且不要忘记,Java 的即时编译可以在多个方法调用中创造奇迹(我将其与 c/c++ 进行了基准测试,并且对 java 与 c/c++ 相比的长期摊销速度感到惊讶)。

祝你好运!

关于java - 性能开销 JNI vs Java vs Native C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49823418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com