android bytebuffer 大小,android – ByteBuffer不释放内存

Android上,一个直接的ByteBuffer似乎并没有释放它的内存,甚至在调用System.gc()时也是如此.

例如:做

Log.v("?", Long.toString(Debug.getNativeHeapAllocatedSize()));

ByteBuffer buffer = allocateDirect(LARGE_NUMBER);

buffer=null;

System.gc();

Log.v("?", Long.toString(Debug.getNativeHeapAllocatedSize()));

在日志中给出两个数字,第二个数字比第一个数字大至少LARGE_NUMBER.

如何摆脱这种泄漏?

添加:

按照Gregory在C方面处理alloc / free的建议,然后定义

JNIEXPORT jobject JNICALL Java_com_foo_bar_allocNative(JNIEnv* env, jlong size)

{

void* buffer = malloc(size);

jobject directBuffer = env->NewDirectByteBuffer(buffer, size);

jobject globalRef = env->NewGlobalRef(directBuffer);

return globalRef;

}

JNIEXPORT void JNICALL Java_com_foo_bar_freeNative(JNIEnv* env, jobject globalRef)

{

void *buffer = env->GetDirectBufferAddress(globalRef);

free(buffer);

env->DeleteGlobalRef(globalRef);

}

然后在JAVA一边得到我的ByteBuffer

ByteBuffer myBuf = allocNative(LARGE_NUMBER);

并释放它

freeNative(myBuf);

不幸的是,虽然它分配的很好,它a)仍然保留根据Debug.getNativeHeapAllocatedSize()分配的内存和b)导致错误

W/dalvikvm(26733): JNI: DeleteGlobalRef(0x462b05a0) failed to find entry (valid=1)

我现在彻底迷惑了,我以为我至少明白了C方面的事情…为什么是free()没有返回内存?我在DeleteGlobalRef()中做错了什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值