【发布时间】:2012-07-02 17:40:47
【问题描述】:
我主要是一名 C++ 程序员,但我正在考虑将 Java 用于项目。出于性能原因,我将需要使用一些 SSE 内部函数(即使相对于普通 C++,这些函数也可以大大提高速度)。
据我了解,在 Java 中执行此操作的方法是使用 JNI 并在 C 中调用 SSE 内在函数。但是,我在 JNI 文档中读到的内容让我有点不安,因为它说 JVM 可能会或可能会不创建发送到 C 和返回的数组的副本。
假设一个最先进的实现,比如 OpenJDK 7,当我请求指向 byte[]、short[]、int[] 或 float[] 的指针时,我应该什么时候真正期望复制?
到目前为止,我发现的只是一些相互矛盾的说法。要被接受,一个答案必须说服我:例如提供证据或引用来源,而不仅仅是表达意见/猜测。
编辑
- 链接到GetPrimitiveArrayCritical
- 正如我所提到的,在回答我的问题时假设 OpenJDK 7 是可以的。
【问题讨论】:
-
JNI 在设计上不提供对 Java 数组的原始数据的访问。上次我检查时,有单个元素访问,以及将一个区域从 Java 数组复制到一个非托管内存区域。我不明白怎么可能不被复制。
-
@SevaAlekseyev 这不是真的:参见例如GetPrimitiveArrayCritical
-
嗯,我猜我有一个旧的 JNI 参考。
标签: java performance java-native-interface sse simd