Android:JNI错误(应用程序错误):本地引用表溢出(最大值=512)
我有一个android应用程序,它有本机代码。本机代码需要从java代码中获取特定值;这个值定期更新,所以我需要在需要使用它时获取它。我正在使用JNI从本机代码调用Java代码Android:JNI错误(应用程序错误):本地引用表溢出(最大值=512),android,c++,java-native-interface,Android,C++,Java Native Interface,我有一个android应用程序,它有本机代码。本机代码需要从java代码中获取特定值;这个值定期更新,所以我需要在需要使用它时获取它。我正在使用JNI从本机代码调用Java代码 std::string val; JNIEnv* env = JSC::Bindings::getJNIEnv(); jclass bridgeClass = env->FindClass("com.mypackage.MyClass"); jmethodID method = env->GetStaticM
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);
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(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)
E/dalvikvm(1063):JNI错误(应用程序错误):本地引用表溢出(max=512)
W/dalvikvm(1063):JNI本地参考表(0xcc8590)转储:
W/dalvikvm(1063):最后10项(共512项):
W/dalvikvm(1063):511:0x413c7e70 java.lang.String“ABC”
W/dalvikvm(1063):510:0x40a39470 java.lang.Class
W/dalvikvm(1063):509:0x413c8558 java.lang.String“9287391238192…(24个字符)
W/dalvikvm(1063):508:0x413c8558 java.lang.String“8298731897198。。。(24个字符)
W/dalvikvm(1063):507:0x413c8558 java.lang.String“1983918729387…(24个字符)
W/dalvikvm(1063):506:0x413c8558 java.lang.String“9283719732827。。。(24个字符)
W/dalvikvm(1063):505:0x413c8558 java.lang.String“1231219897173…(24个字符)
W/dalvikvm(1063):504:0x413c8558 java.lang.String“823733027537。。。(24个字符)
W/dalvikvm(1063):503:0x413c8558 java.lang.String“1293657681298…(24个字符)
W/dalvikvm(1063):502:0x413c8558 java.lang.String“1298753090172。。。(24个字符)
W/dalvikvm(1063):摘要:
W/dalvikvm(1063):2个java.lang.Class(2个唯一实例)
W/dalvikvm(1063):510个java.lang.String(2个唯一实例)
E/dalvikvm(1063):添加到JNI本地引用表失败(有512个条目)
所有类似的在线问题都有一个共同的答案,那就是需要释放更多的资源。有人能告诉我在这种情况下还能释放哪些其他资源吗
谢谢。您需要删除对
env->CallStaticObjectMethod(bridgeClass, method)
详情如下:
jobject returnValue = env->CallStaticObjectMethod(bridgeClass, method);
// ...
env->DeleteLocalRef(returnValue);
@PriyankaChauhan呃,输入?复制/粘贴它?有什么问题吗?