爲了提高我的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