【问题标题】:Creating native memory leak in Java在 Java 中创建本机内存泄漏
【发布时间】:2014-12-15 14:57:26
【问题描述】:

考虑以下代码:

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() 分配了一个字符数组。但是,此内存并未明确释放。

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

【问题讨论】:

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


    【解决方案1】:

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

    所以你需要找到一种方法来清理所有原生资源。通常的方法是将原生资源包装在一些 Java 对象中,并添加 native 方法以在您使用完资源时释放它们。

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 2015-12-30
      相关资源
      最近更新 更多