JNI: когда я должен освободить ресурсы?

#java-native-interface

#java-native-interface

Вопрос:

 JNIEXPORT jstring JNICALL Java_com_xxx_xpdf_PdfToText_getTextOnly(JNIEnv *env, jclass obj,
                                                                 jstring pdf_path) {
  const char *pdf = env->GetStringUTFChars(pdf_path, 0);

  std::string content;
  unsigned int i = getTextFromPDF(pdf, amp;content);

  env->ReleaseStringUTFChars(pdf_path, pdf);

  const char *result = content.c_str();
  jstring str = env->NewStringUTF(result);

  return str;
}
  

Нужно ли мне повторно использовать str и content здесь? И почему?

Ответ №1:

Номер. str относится к объекту Java, который продолжает существовать за пределами этого метода JNI, поскольку это возвращаемое значение. content является локальным объектом C , который автоматически уничтожается при выходе из области его объявления.

Комментарии:

1. Я знаю, что это немного старый поток, но когда str в op не будет возвращен, нужно ли его освобождать явно?