美文网首页
JNI学习记录2-local refence崩溃问题

JNI学习记录2-local refence崩溃问题

作者: ai___believe | 来源:发表于2017-02-20 19:34 被阅读137次

JNI学习记录1-初建JNI工程
JNI学习记录2-local refence崩溃问题
JNI学习记录3-String and Array
JNI学习记录4-Fields
JNI学习记录5-Methods

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=84151&_dsign=ce27c1ec

崩溃1

jni1.png jni2.png

02-21 10:53:41.627 31176-31176/com.sample.zhanganl.ndkjnidemo3 A/libc: stack corruption detected
02-21 10:53:41.627 31176-31176/com.sample.zhanganl.ndkjnidemo3 A/libc: Fatal signal 6 (SIGABRT) at 0x000079c8 (code=-6), thread 31176 (anl.ndkjnidemo3)
原因:字符串长度有上限?

然而,在循环调用本地接口时,没有 env->ReleaseStringUTFChars(aa, bb); 是不会影响到崩溃的。

有两种方式让LocalRef无效,一,native method返回,JavaVM自动释放LocalRef;二,
用DeleteLocalRef主动释放。

http://blog.csdn.net/likuan0214/article/details/52671098

http://blog.csdn.net/zerokkqq/article/details/54944422

[Android JNI局部引用表溢出:local reference table overflow (max=512)]

http://blog.csdn.net/xyang81/article/details/44873769
// 保证至少可以创建3个局部引用(str_array,cls_string,obj_str)
if ((*env)->EnsureLocalCapacity(env, 3) != JNI_OK) {
return NULL;
}
当local reference 过多导致local reference table overflow (max=512)时,在使用每个local reference之前,最好先判断有没有足够的能力。

另外,
jclass jcls;//需要DeleteLocalRef
jobject jcls;//需要DeleteLocalRef
jstring jcls;//需要ReleaseStringUTFChars DeleteLocalRef
jarray jcls;//需要DeleteLocalRef
jmethodid jfieldid//不需要DeleteLocalRef

http://blog.csdn.net/ztp800201/article/details/7336998

相关文章

网友评论

      本文标题:JNI学习记录2-local refence崩溃问题

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