Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:JNI错误(应用程序错误):本地引用表溢出(最大值=512)_Android_C++_Java Native Interface - Fatal编程技术网

Android:JNI错误(应用程序错误):本地引用表溢出(最大值=512)

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

我有一个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);
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呃,输入?复制/粘贴它?有什么问题吗?