JNI création d'objets et de gestion de la mémoire

J'ai le texte suivant JNI méthode qui crée une collection d'objets Java en natif, puis les retourner pour 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;
}

Ai-je besoin pour libérer les objets créés dans le code natif, ou est-il fait automatiquement par le GC?
Si je le fais, comment dois-je faire, car j'ai besoin de le retourner à Java?

  • Je pense qu'il serait pour le code natif pour faire sa propre gestion de la mémoire. Dans ce cas, j'imagine que vous auriez besoin d'ajouter une autre méthode native qui libère l'objet alloué(s), ce qui vous manuellement à l'appel lorsque vous avez terminé avec eux. Plus généralement, si vous êtes en train de faire des choses avec JNI alors j'espère que vous êtes prêts pour un monde de souffrance. Cette réponse peut aider: stackoverflow.com/questions/214699/...
  • mal. si vous attribuez l'objet Java dans JNI, ils sont des objets Java, détenue par le GC.
  • De sens, mais que dans le cas de code natif qui alloue des non-objets Java/mémoire, par exemple en appelant malloc()?
  • pas ce que cette question est à propos.
InformationsquelleAutor nbarraille | 2012-02-20