gpt4 book ai didi

java - GC 会在 Android 上自动处理/释放在 jni 中分配的内存吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:55 26 4
gpt4 key购买 nike

我在 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;

pBuffer 会被 GC 处理/释放吗?

最佳答案

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

#include <stdlib.h>

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

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

关于java - GC 会在 Android 上自动处理/释放在 jni 中分配的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33427696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com