美文网首页
JNI ERROR (app bug): local refer

JNI ERROR (app bug): local refer

作者: _compass | 来源:发表于2019-12-11 12:47 被阅读0次

    最近在跟一个Android崩溃问题,现象是在某些手机上app会崩溃,有些不会。仔细跟踪了代码发现,在JNI中,转换某数据过程中,会崩溃到以下地方:
    NewObject失败;
    NewStringUTF 失败;
    FindClass 失败;
    等等。
    查看logcat,果然有local reference table overflow问题:

    JNI ERROR (app bug): local reference table overflow (max=512) local reference table dump
    

    在JNI中,new的局部引用需要释放掉,必须DeleteLocalRef,否则会报local reference table溢出问题。
    解决方法如下:
    在使用过FindClass/NewString/ NewStringUTF/NewObject/ GetObjectField 这些都应该加上DeleteLocalRef.
    例如:

    jstring tempString = env->NewStringUTF(str.c_str());
    env->SetObjectField(jobjectNodeInfo, jfieldIDNodeName, tempString);
    // 下面这句一定要加,否则局部引用表会溢出。
    env->DeleteLocalRef(tempString);
    

    即可。

    相关文章

      网友评论

          本文标题:JNI ERROR (app bug): local refer

          本文链接:https://www.haomeiwen.com/subject/eqyogctx.html