JNI-Objekte Erstellung und Speicher-management

Habe ich Folgendes JNI-Methode, erstellt eine Sammlung von Java-Objekten nativ, und dann wieder zurück zu Java:

JNIEXPORT jobject JNICALL Java_com_test_myClass_myMethod(JNIEnv * env, jclass klass) {
    jclass arrayClass = env->FindClass("java/util/ArrayList");
    jmethodID initMethod = env->GetMethodID(arrayClass, "<init>", "()V");
    jmethodID addMethod = env->GetMethodID(arrayClass, "add", "(Ljava/lang/Object;)Z");
    jobject myArray = env->NewObject(arrayClass, initMethod);

    env->CallBooleanMethod(myArray, addMethod, env->NewStringUTF("Hello"));
    env->CallBooleanMethod(myArray, addMethod, env->NewStringUTF("World"));

    return myArray;
}

Brauche ich, um die erstellten Objekte in den native code, oder ist es automatisch mit dem GC?
Wenn ich das mache, wie mache ich das, wie ich brauche, um Sie wieder in Java?

Ich würde denken, dass es bis zu den native code zu tun, seine eigene Speicherverwaltung. In diesem Fall würde ich mir vorstellen, dass Sie würde müssen, fügen Sie eine andere native Methode, die Versionen der zugewiesenen Objekt(en), die Sie manuell aufrufen, wenn Sie fertig sind mit Ihnen. Generell, wenn Sie Dinge, die Sie mit JNI dann hoffe ich, Sie sind bereit für eine Welt voller Schmerzen. Diese Antwort kann helfen: stackoverflow.com/questions/214699/...
falsch. wenn Sie reservieren Java-Objekt in JNI, Sie sind Java-Objekte, die im Besitz der GC.
Macht Sinn, aber was ist im Fall der native code, der die Zuweisung der nicht-Java-Objekte/Speicher, zum Beispiel durch den Aufruf malloc()?
nicht, was diese Frage betrifft.

InformationsquelleAutor nbarraille | 2012-02-20

Schreibe einen Kommentar