我有一个调用本地函数多次的Java程序。我的问题是这个函数存在内存泄漏,而我尝试去解决它的所有方法都导致了内存转储。非常感谢您提供任何帮助。
这是我的代码:
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);
我的问题是,如果取消注释上面的代码,会导致内存转储,如果不取消注释,我的程序几分钟内就会耗尽内存。
env->DeleteLocalRef(byteArray);
delete[] finalSendArray;
}
}
任何帮助都将不胜感激。谢谢!
byteArray
,然后删除底层内存? - Kerrek SB