【发布时间】:2014-06-21 11:18:30
【问题描述】:
我在我的 Android 应用程序中使用 C 语言分配了大量内存。
为了避免任何内存泄漏,我想更好地了解 JAVA 垃圾收集器如何释放不再使用的内存。
在JAVA中分配变量时,很明显GC可以清除它。但是当在 C 函数中进行分配时,我在其他帖子中读到 JAVA 有时可能不确定变量是否仍在使用中,并且永远不会被清除导致内存泄漏。
请随时评论任何可以丰富我们对 C 本机函数中的内存分配和释放的理解的信息。我还添加了 2 个代码示例,希望得到您的意见。
谢谢大家!
例子:
代码 1 - new_string 肯定不是内存泄漏,java 是否能够垃圾收集 str_to_return?
jstring
Java_com_example_adhocktest_SenderUDP_SendUdpJNI( JNIEnv* env,
jobject thiz)
{
char * new_string = (char*)malloc(sizeof(char)*200);
jstring str_to_return = (*env1)->NewStringUTF(env1, new_string);
free(new_string);
return (*env1)->NewStringUTF(env1, str_to_return);
}
** 代码 2** - 可以像我们在这里一样直接返回 new_string 吗?我们怀疑会有内存泄漏
jstring
Java_com_example_adhocktest_SenderUDP_SendUdpJNI( JNIEnv* env,
jobject thiz)
{
char * new_string = (char*)malloc(sizeof(char)*200);
return (*env1)->NewStringUTF(env1, new_string );
}
【问题讨论】:
标签: android c memory-leaks java-native-interface native