JNI谁释放了由Java方法返回的ByteBuffer?
我理解当从Java调用C时,不需要释放通过GetDirectBufferAddress
方法获得的内存。垃圾收集器知道何时回收内存。在我的例子中,我正在从C调用一个Java方法。下面是我的Java方法的代码片段:
ByteBuffer processTask() {
...
ByteBuffer retVal = ByteBuffer.allocateDirect(len);
return retVal;
}
下面是我的C函数的代码片段:
jobject retVal = invokeProcessTask();
uint8_t* buf = (uint8_t*) env->GetDirectBufferAddress(retVal);
在本例中,我认为垃圾收集器不知道何时收集ByteBuffer
实例。我想释放这个内存是我的C代码的责任。是这样吗?如果是,我需要调用什么函数来释放它?问候
共 (0) 个答案