JNI中的内存泄漏

问题描述

我用JNI开发了一个Cpp库。 CPP库具有一些函数,我可以通过这些函数将java中的字符串数组和数字数组传递给它们。不幸的是,当我运行整个程序时,进程的内存使用量正在增加,并最终被杀死。我使用以下函数将字符串Array,nums Array从Java转换为C格式。我还将函数中的字符串返回给Java。

我想知道以下功能中是否存在内存泄漏

myVector<string> getCStringFromJavaString(jobjectArray msgWordsStrArray,JNIEnv *env){
  int stringCount = env->GetArrayLength(msgWordsStrArray);
  myVector<string> msgWordsArray;

  for (int i=0; i<stringCount; i++) {
    jstring orig = (jstring) (env->GetObjectArrayElement(msgWordsStrArray,i));
    const char *rawString = env->GetStringUTFChars(orig,0);
    msgWordsArray.push_back(rawString);
    env->ReleaseStringUTFChars(orig,rawString);
  }

  return msgWordsArray;

}

myVector<myDouble> getMyDoubleFromJavaDouble(jdoubleArray numsArray,JNIEnv *env){
  int numsCount = env->GetArrayLength(numsArray);
  myVector<myDouble> N;
  double *numsArrayCStyle = env->GetDoubleArrayElements(numsArray,0);

  for(int i = 0;i < numsCount; i++ ){
    double orig = numsArrayCStyle[i];
    myDouble origMyDouble(orig);
    N.push_back(origMyDouble); 
  }
  env->ReleaseDoubleArrayElements(numsArray,numsArrayCStyle,JNI_ABORT);

  return N;
}

jstring getJStringFromCString(string cstring,JNIEnv *env){
   return env->NewStringUTF(cstring.c_str());
}

PS:myDouble,myVector是模仿向量的类,在cpp中为double。它们中没有内存泄漏

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...