ネイティブ コードを持つ 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);
私はこの呼び出しを非常に頻繁に (1 分間にほぼ 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)
オンラインの同様の質問にはすべて、より多くのリソースを解放する必要があるという共通の答えがあります。この場合、他にどのリソースを解放できるかを誰か教えてもらえますか?
ありがとう。