JNI memory leak aus byte-array

Ich habe ein java-Programm, dass nennt eine native Funktion um ein Vielfaches. Mein problem ist, dass diese Funktion ein Speicherleck hat, und alles, was, die ich tun, um loszuwerden, es zu einem memory dump. Jegliche Hilfe würde sehr geschätzt werden.

Dies ist mein 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);

Mein problem ist, dass die oben ^ code bewirkt, dass ein memory-dump, wenn es unkommentiert, wenn es nicht unkommentiert mein Programm läuft out of memory in Minuten

    env->DeleteLocalRef(byteArray);
    delete[] finalSendArray;
    }
}

jede Hilfe würde geschätzt werden. Danke!

Lassen Sie die byteArray zuerst, dann löschen Sie den zugrunde liegenden Speicher?
Habe meine Antwort löst Ihr Problem? Markieren Sie es als richtig, wenn Sie es Tat. Warum machst du das alles in C? Was bedeutet getCommand tun? Könnte es sein, erfolgt in java? jni ist teuer.
hey sorry das es so lange gedauert hat für eine Antwort, ich habe noch ein Leck irgendwo. Ich bin mir nicht sicher, wo. Ich bin mit c++ weil ich bin nur die Wiederverwendung von code, wurde bereits gebaut. Könnte es sein, neu in Java geschrieben, aber ich würde es vorziehen, nur halten es in seiner aktuellen Umsetzung.
Ich Wünsche mir, dass gearbeitet hatte... habe es aber leider nicht.
Tut mir Leid zu hören. Ich weiß wirklich nicht; der einzige Rat, den ich geben könnte, ist zu Lesen, die die JNI-Spezifikation sorgfältig durch und stellen Sie sicher, dass Sie verstehen, all die verschiedenen Leben und Abhängigkeiten.

InformationsquelleAutor Tyler Davis | 2013-09-06

Schreibe einen Kommentar