【发布时间】:2012-12-17 21:43:00
【问题描述】:
我有调用一些 java 功能的 C++ 应用程序。我正在使用 JNI。一切正常,但仍然存在一个小问题。在 C++ 应用程序中,我有一些巨大的数组。 Java App 也需要这些数据并返回一大堆结果。目前我只是复制数据(你可以检查下面的代码)。如果我通过指针直接从 Java App 访问这些数组会更好。是否可以?我假设不是(因为 JVM),但在这种情况下,我必须向我的老板详细解释 :) 那么,是或否,以及如何或为什么?
jdoubleArray in2 = env->NewDoubleArray(1000);
jdouble *elems2 = (jdouble*)calloc(1000, sizeof(jdouble));
for(int i = 0; i < 1000; i++)
{
elems2[i] = (jdouble)inputArray[i];
}
env->SetDoubleArrayRegion(in2, 0, 1000, elems2);
if(midCD != NULL)
{
jdouble res1 = env->CallStaticDoubleMethod(cls, midCD, in2);
double res1c = res1;
printf("C++.Res1: %f\n", res1c);
}
【问题讨论】:
-
我将创建一个 Java 'array' 类,它由其在 C++ 中的对等类实现,所有操作都将使用本机例程。这样,数据本身将完全在 C++ 世界中,无需任何复制。
-
对不起,我不太明白,你到底是什么意思。 C++ 中的对等类应该是什么样子?以及Java数组类如何访问它?
标签: java memory-management java-native-interface