During initial stages of my coding the application that I programmed use to re-start due to Java Exception "java.lang.OutOfMemoryerror". After much analysis, we found that making frequent JNI function calls caused the java.lang.OutOfMemoryError.
Reason for the problem - JNI Memory Leak
The reference for any object created in Java and sent to JNI native functions were not de-referenced automatically. Since these objects were not de-referenced, they couldn't be cleared by GC which caused the memory leak.
Solution
Please refer following sample code to free the memory.
JNIEXPORT jobject JNICALL Java_sample_package_SampleJavaClass_classMethod
(JNIEnv * env, jobject obj, jstring jstrString)
{
const jchar* szString = (jchar*)env->GetStringChars(jstrString, 0);
env->ReleaseStringChars(jstrString, (const jchar *)szString);
// De-Referencing the String object
env->DeleteLocalRef(jstrString);
}
Results
Considerable amount of Memory Leaks were fixed. Throughput is not 100%.
Additional Reference:
http://www.dynamicobjects.com/d2r/archives/001816.html