title: Android : JNI ERROR (app bug): local reference table overflow (max=512)
body: <p>I have an android app which has native code. The native code needs to get a particular value from java code; this value updates regularly, so I need to get it when I need to use it. I am using JNI to make the call from native code to Java code.</p>
  
  <pre><code>std::string val;
  JNIEnv* env = JSC::Bindings::getJNIEnv();
  jclass bridgeClass = env-&gt;FindClass("com.mypackage.MyClass");
  jmethodID method = env-&gt;GetStaticMethodID(bridgeClass, "getVal", "()Ljava/lang/String;");
  val = jstringToStdString(env, static_cast&lt;jstring&gt;(env-&gt;CallStaticObjectMethod(bridgeClass, method)));
  env-&gt;DeleteLocalRef(bridgeClass);
  </code></pre>
  
  <p>I make this call very often (almost 100 times a minute), and I am facing the following exception:</p>
  
  <pre><code>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&lt;android.util.Log&gt;
  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)
  </code></pre>
  
  <p>All the similar questions online have the common answer that more resources need to be freed. Can anyone tell what other resources can I free in this case?</p>
  
  <p>Thanks.</p>