您的位置:首页 > 移动开发 > Android开发

android 内存泄露之jni local reference table overflow (max=512)

2015-08-03 17:59 465 查看
android 内存泄露之jni local reference table overflow (max=512)

出现这个问题需要注意的是,要释放所有调用Java的地方

CallObjectMethod
GetStringUTFChars
CallStaticObjectMethod


所返回的对象都需要释放

GetStringUTFChars的释放如下
jstring jstr = (jstring)minfo.env->CallObjectMethod(jobj, minfo.methodID);
const char *str = minfo.env->GetStringUTFChars(jstr, false);
path = std::string(str) + fileName;
minfo.env->ReleaseStringUTFChars(jstr,str);
minfo.env->DeleteLocalRef(jstr);

CallObjectMethod和CallStaticObjectMethod
释放如下minfo.env->DeleteLocalRef(jstr);


重要一点minfo.classID也需要释放,因为它们所生成的都是local Ref

minfo.env->DeleteLocalRef(minfo.classID);


如果不释放调用的对了便会导致程序直接崩溃

参考文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: