【发布时间】:2017-05-03 14:37:18
【问题描述】:
由于我想知道是否值得使用JNI 来提高我的应用程序的性能,所以我想知道GetIntArrayElements 的复杂性是多少。它是否总是在C 中分配一个新的原始数组并从原始Java 数组中复制所有元素,或者它以某种方式设法传递一个指针?
我想知道将JNI 用于线性算法是否值得,例如两个向量的逐点乘法。如果GetIntArrayElements 是线性的,我猜如果我们需要先复制向量,使用C/C++ 的潜在性能提升将会丢失。
【问题讨论】:
-
你可以传递一个直接的字节缓冲区,它或多或少像一个指针。但我怀疑您是否会从使用 JNI 中获益良多。 Oracle 的 JVM 有一个 JIT,它发出高度优化的本机代码。如果有任何性能优势,它可能不会摊销互操作的成本。 JNI 最适用于当您有一些可以在 C 中完成但在 Java 中无法完成的事情时,例如 OpenGL。
-
感谢您的评论!您介意分享更多有关字节缓冲区的信息吗? (一个链接就足够了)此外,您的评论是否暗示
GetIntArrayElements总是线性的?
标签: java c performance java-native-interface time-complexity