GC会在Android上自动配置/解除分配在jni中分配的内存吗?

时间:2015-10-30 02:23:51

标签: java android c garbage-collection

我在JNI中分配内存和新的ByteBuffer对象如下:

uint8_t* pBuffer = (uint8_t*)malloc(size);
// fill the pBuffer
jobject byteBufferInJni = (*env)->NewDirectByteBuffer(env, pBuffer, size);

然后将byteBufferFromJni传递给Java层,如下所示:

callback(byteBufferInJni);

在java图层中,获取对象byteBufferInJni

问题是:

如果我在java中取消引用byteBufferInJni,就像这样:

byteBufferInJni = null;

GC会{/ 1}}处理/解除分配吗?

1 个答案:

答案 0 :(得分:1)

不,JVM不知道使用了malloc,并且应该使用free取消分配内存。如果ByteBuffer要自动调用free,如果内存是静态分配的,JVM会崩溃:

#include <stdlib.h>

int main()
{
    char *str = "Hello, World!";
    free(str); // Never do this!
}

你有责任释放它。有许多方法可以获取内存,并且需要非常具体的方法来释放它,例如, malloc/freenew/deletenew[]/delete[]