Friday, 6 September 2013

JNI memory leak from byte array

JNI memory leak from byte array

I have a java program that calls a native function many times over. My
problem is that this function has a memory leak and everything that I do
to get rid of it cause a memory dump. Any help would be greatly
appreciated.
This is my code
JNIEXPORT void JNICALL Java_class_method_getInput
(JNIEnv *env, jobject obj)
{
if (inputIsAvailable)
{
int size = getBufferCurrentIndex();
size -= getBufferReadIndex();
size *= 2;
char *finalSendArray = new char[size];
getCommand(finalSendArray);
jbyteArray byteArray = env->NewByteArray(size / 2);
env->SetByteArrayRegion(byteArray, 0, size / 2, (jbyte*) finalSendArray);
while(methodID == 0)
{
jclass cls = env->GetObjectClass(obj);
methodID = env->GetMethodID(cls, "setCommand", "([B)V" );
}
env->CallVoidMethod(obj, methodID, byteArray);
//env->ReleaseByteArrayElements(byteArray, (jbyte*) finalSendArray,
JNI_ABORT);
My problem is that the above ^ code causes a memory dump if it is
uncommented, if it is not uncommented my program runs out of memory in
minutes
env->DeleteLocalRef(byteArray);
delete[] finalSendArray;
}
}
any help would be appreciated. Thanks!

No comments:

Post a Comment