Android : JNI ERROR (app bug): local reference table overflow (max=512)
Posted
技术标签:
【中文标题】Android : JNI ERROR (app bug): local reference table overflow (max=512)【英文标题】: 【发布时间】:2012-06-21 23:54:03 【问题描述】:我有一个具有本机代码的 android 应用程序。本机代码需要从 java 代码中获取特定的值;这个值会定期更新,所以我需要在需要使用的时候获取它。我正在使用 JNI 从本机代码调用 Java 代码。
std::string val;
JNIEnv* env = JSC::Bindings::getJNIEnv();
jclass bridgeClass = env->FindClass("com.mypackage.MyClass");
jmethodID method = env->GetStaticMethodID(bridgeClass, "getVal", "()Ljava/lang/String;");
val = jstringToStdString(env, static_cast<jstring>(env->CallStaticObjectMethod(bridgeClass, method)));
env->DeleteLocalRef(bridgeClass);
我经常打这个电话(几乎每分钟 100 次),我面临以下异常:
E/dalvikvm( 1063): JNI ERROR (app bug): local reference table overflow (max=512)
W/dalvikvm( 1063): JNI local reference table (0xcc8590) dump:
W/dalvikvm( 1063): Last 10 entries (of 512):
W/dalvikvm( 1063): 511: 0x413c7e70 java.lang.String "ABC"
W/dalvikvm( 1063): 510: 0x40a39470 java.lang.Class<android.util.Log>
W/dalvikvm( 1063): 509: 0x413c8558 java.lang.String "9287391238192... (24 chars)
W/dalvikvm( 1063): 508: 0x413c8558 java.lang.String "8298731897198... (24 chars)
W/dalvikvm( 1063): 507: 0x413c8558 java.lang.String "1983918729387... (24 chars)
W/dalvikvm( 1063): 506: 0x413c8558 java.lang.String "9283719732827... (24 chars)
W/dalvikvm( 1063): 505: 0x413c8558 java.lang.String "1231219897173... (24 chars)
W/dalvikvm( 1063): 504: 0x413c8558 java.lang.String "8237330127537... (24 chars)
W/dalvikvm( 1063): 503: 0x413c8558 java.lang.String "1293657681298... (24 chars)
W/dalvikvm( 1063): 502: 0x413c8558 java.lang.String "1298753090172... (24 chars)
W/dalvikvm( 1063): Summary:
W/dalvikvm( 1063): 2 of java.lang.Class (2 unique instances)
W/dalvikvm( 1063): 510 of java.lang.String (2 unique instances)
E/dalvikvm( 1063): Failed adding to JNI local ref table (has 512 entries)
网上所有类似的问题都有一个共同的答案,那就是需要释放更多的资源。谁能告诉我在这种情况下我可以释放哪些其他资源?
谢谢。
【问题讨论】:
【参考方案1】:你需要删除本地 ref 到返回的值
env->CallStaticObjectMethod(bridgeClass, method)
如下:
jobject returnValue = env->CallStaticObjectMethod(bridgeClass, method);
// ...
env->DeleteLocalRef(returnValue);
【讨论】:
@PriyankaChauhan Err,输入吗?复制/粘贴它?有什么问题?以上是关于Android : JNI ERROR (app bug): local reference table overflow (max=512)的主要内容,如果未能解决你的问题,请参考以下文章
JNI ERROR (app bug): local reference table overflow (max=512) Android
Android Webrtc JNI ERROR (app bug): local reference table overflow (max=512)
jni 编译错误error: unknown type name '__va_list'
海康摄像头视频调用出错,Jni Error(app bug): accessed stale local reference解决办法