在Java中创建本机内存泄漏

在Java中创建本机内存泄漏,java,memory-leaks,java-native-interface,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&

考虑以下代码:

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
}
#包括
JNIEXPORT void JNICALL Java_MyClass_createMemoryLeak(JNIEnv*env,jobject obj)
{
char*leaked_array=malloc(sizeof(char)*100000);//这将被泄漏
}
MyClass
有一个本机方法
createMemoryLeak()
。在这个方法中,有一个使用
malloc()
分配的字符数组。但是,此内存没有显式释放

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

是,这将导致内存泄漏。Java不在乎本机代码做什么,只要它不崩溃


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

是的,这将导致内存泄漏。Java不在乎本机代码做什么,只要它不崩溃

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