在JNI中,我通过调用SetObjectArrayElement()插入一个在JNI代码中本地创建的java对象来构造一个大数组。我的问题是,在使用SetObjectArrayElement()将对象插入数组后,数组是否存储了一个引用,以便我可以使用DeleteLocalRef释放对插入对象的本地引用? 最佳答案 是的。jobjectArray指向一个引用数组。当您将该数组的成员设置为本地引用时,您已经对该对象进行了第二次引用。如果删除本地引用,数组中的引用将保留。垃圾收集器不会处理实际对象,直到没有剩余的可访问引用为止。
我正在用Java和AndroidjniC++做一个项目。我在C++中有一个具有以下参数的函数:C++函数:voidrectify(vector&corners,Mat&img){...}在JAVA中,调用将是:Matimage=Highgui.imread("img.png");Listcornners=newArrayList();;Pointb=newPoint(real_x2,real_y2);MatOfPointma=newMatOfPoint(b);cornners.add(ma);rectfy(image.getNativeObjAddr(),cornners)public
当我运行代码时,我得到一个错误“添加到JNI本地引用表失败有512个条目”这是我的代码:jstringpJNIData=pJNIEnv->NewStringUTF(variables[0].GetStringValue());pJNIEnv->CallStaticVoidMethod(pJNIActivityClass,pJNIMethodIDStartTime,pJNIData);pJNIEnv->DeleteLocalRef(pJNIData);我已经阅读了一些建议,但没有一个有效!尽管有DeleteLocalRef,它仍然无法工作。该函数在一个分析器中使用,该分析器从字面上调用所
我从JNI方法返回一个jstring。我在返回值之前删除了对它的本地引用。JNIEXPORTjstringJNICALLTestJNIMethod(JNIEnv*env,jclass){jstringtest_string=env->NewStringUTF("test_string_value");env->DeleteLocalRef(test_string);returntest_string;}调用的JAVA方法是否仍然能够访问返回的jstring,或者垃圾收集器是否会清理内存? 最佳答案 不,不会,但是您的代码可以在早于I
问题一:jstringjstrKey;for(inti=1;iNewString((jchar*)strKey,wcslen(strKey));}env->DeleteLocalRef(jstrKey);问题二:for(inti=1;iNewString((jchar*)strKey,wcslen(strKey));env->DeleteLocalRef(jstrKey);}我在这两个问题中是否正确使用了DeleteLocalRef?特别是在问题1中,我在循环后删除了本地引用。我认为这是正确的,并且不需要在循环内调用deletelocalref,因为我没有创建任何新的本地引用。所以关于