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

最近在跟一个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);

即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容