在Java中创建本机内存泄漏

时间:2014-12-15 14:57:27

标签: java memory-leaks java-native-interface

请考虑以下代码:

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数组。但是,此内存未明确释放。

我想知道当方法超出范围时,这个内存会发生什么。 这段代码会造成内存泄漏吗?

1 个答案:

答案 0 :(得分:4)

是的,这会造成内存泄漏。只要它不崩溃,Java就不关心本机代码的作用。

因此,您需要找到一种方法来清理所有本机资源。通常的方法是将本机资源包装在某个Java对象中,并添加native方法以在完成后处理资源。