请考虑以下代码:
MyClass.java:
public class MyClass {
public native void createMemoryLeak();
public static void main(String[] args) {
MyClass myObject = new MyClass();
myObject.createMemoryLeak();
}
}
MyClass.c:
#include <MyClass.h>
JNIEXPORT void JNICALL Java_MyClass_createMemoryLeak(JNIEnv *env, jobject obj)
{
char * leaked_array = malloc(sizeof(char)*100000); // This is going to be leaked
}
MyClass
有一个原生方法createMemoryLeak()
。在此方法中,使用malloc()
分配了一个char数组。但是,此内存未明确释放。
我想知道当方法超出范围时,这个内存会发生什么。 这段代码会造成内存泄漏吗?
答案 0 :(得分:4)
是的,这会造成内存泄漏。只要它不崩溃,Java就不关心本机代码的作用。
因此,您需要找到一种方法来清理所有本机资源。通常的方法是将本机资源包装在某个Java对象中,并添加native
方法以在完成后处理资源。