1
我在我的Android應用程序中使用C中的內存分配很多。Android的JNI - 如何正確釋放內存分配在C本機功能
爲了避免任何內存泄漏,我想更好地理解JAVA垃圾回收器如何釋放不再使用的內存。
當在JAVA中分配變量時,顯然GC可以清除它。但是當在C函數中進行分配時,我已經在其他文章中讀到了JAVA有時可能不確定變量是否仍在使用,並且它永遠不會被清除,從而導致mem泄漏。
請隨時與發表評論任何有助於我們理解內存分配和釋放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?我們懷疑會有mem泄漏
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);
}
謝謝您的回答上創建。 所以,如果我理解正確,你給的最後一個例子的jstring將被JAVA釋放,因爲它是該函數的調用者? – Wakaka
是的--J類型將被Java釋放。 – cup