为了提高我的android应用程序的性能,我决定在C++中重新编写计算部分并使用JNI。这里是问题:我的C++方法在多级循环中生成大量的对象(2k到10k)。一个对象正在最深层次上创建,并存储在jobject的向量中以供以后返回。我最后一部分的实现如下:JNI:如何删除本地参考C++
jobject genObj = env->NewObject(jclass,jmethodId,...);
Vector.push_back(genObj);
env->DeleteLocalRef(genObj);
这段代码给我:
JNI错误(应用程序错误):访问过时的本地引用
这意味着我尝试访问已删除的内存块。这是意想不到的,因为push_back应该复制参数而不是它的指针。
我该怎么办?
PS:不删除本地裁判会导致表localRef所溢出
所以,如果你必须保持两个向量什么点向量。它没有意义。在C++中使用java集合会造成巨大的开销,并且不能完成这项工作。我认为应该有更好的办法。 –
我不知道你的矢量点是什么。只有你知道这一点。我没有说任何其他的保持两个。我给了你两种方式,这足够一天。 – EJP