JNI函数返回的字符串被垃圾收集
JNI function returning string is garbage collected?
我有一个c++中的JNI函数,它返回一个Java String。这个字符串垃圾被JVM收集了吗?
extern "C"
JNIEXPORT jstring JNICALL
Java_com_playax_fingerprint_Echoprint_code(JNIEnv *env, jobject obj, jstring fileName){
const char *nativeString = env->GetStringUTFChars(fileName, 0);
char* str1 = const_cast<char *>(nativeString);
codegen_response_t* response = codegen_file(str1, 0, 0, 0);
char *output = make_short_json_string(response);
free(response);
env->ReleaseStringUTFChars(fileName, nativeString);
return env->NewStringUTF(output);
}
谁负责释放output
变量的内存?上面的代码没有内存泄漏吗?
从JNI函数返回的Java字符串(即java.lang.String
)受到垃圾收集的影响。您提供给NewStringUTF
的char*
不是,因为NewStringUTF
创建了新Java字符串中内容的副本。因此,如果output
指向在本机代码中动态分配的内存,并且没有通过其他方式释放,那么您将有内存泄漏(或者至少如果重复调用本机方法,您将有内存泄漏)。
重写为
jstring result = env->NewStringUTF(output);
free(output); // or whatever will release this memory
return result; // result does not need output
相关文章:
- 字符串函数在目标C++上运行时C++返回空
- 字符串函数返回奇怪的值
- 这里的字符串函数是什么意思
- 在字符串函数中抛出'char const*'实例后调用的终止
- 为什么 stl 字符串C++函数有时出错有时会出错?
- 从C++为字符串函数设置_ENV
- 来自 2D 数组的字符串函数
- 返回最长的公共子字符串函数 c ++
- 使用getline和字符串函数C++程序中的分段错误
- 在字符串函数的指针中返回地址
- 字符串函数:strcat()
- 这个子字符串函数有什么问题
- 字符串函数不返回字符串? C++
- 使用向量和字符串函数返回字符串
- 尝试修复一个字符串函数,该函数采用字符串并通过替换一些单词来更改它
- 逐字读取字符数组,无需字符串函数
- 我从我的字符串函数返回到主函数
- 为什么我不能从字符串函数返回字符串数组?
- 如何在不使用字符串函数的情况下在char数组中找到字符串?(C )
- 带有 #include< iostream.h> 的程序允许使用 strlen() 等字符串函数。为什么?