Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Native:从本机层返回后如何释放对象_Java_Android_C_Android Ndk_Java Native Interface - Fatal编程技术网

Java Android Native:从本机层返回后如何释放对象

Java Android Native:从本机层返回后如何释放对象,java,android,c,android-ndk,java-native-interface,Java,Android,C,Android Ndk,Java Native Interface,我尝试使用本机层来分配对象。例如: JNIEXPORT jobject JNICALL Java_memory_hqt_com_heapsizetesting_jnitest_JNIActivity_getBigDataFromJni(JNIEnv *env, jobject instance, jint memory) { unsigned char* buffer = (unsigned char*) malloc(memory); jobject directBuff

我尝试使用本机层来分配对象。例如:

JNIEXPORT jobject JNICALL
Java_memory_hqt_com_heapsizetesting_jnitest_JNIActivity_getBigDataFromJni(JNIEnv *env, jobject instance, jint memory) {

     unsigned char* buffer = (unsigned char*) malloc(memory);
     jobject directBuffer = (*env)->NewDirectByteBuffer(env, buffer, memory);
     return directBuffer;
}
然后我在Java层再次获得数据:

 public native Object getBigDataFromJni(int memory);
 ByteBuffer data = (ByteBuffer) getBigDataFromJni(1024);

正如我所知,本机对象不是由垃圾收集器管理的。因此,我的问题是:在使用完数据对象之后,如何回收内存。

至于
释放
本机缓冲区,一个简单的方法是将
缓冲区
指针投射到
jlong
,将其作为Java long返回到Java层,然后在完成后,将其传递回本机层,将其转换回指针并使用该指针调用
free()


注意:我从未在Android上尝试过,但它通常在Linux、各种Unix和Windows上都能工作。

您使用本机代码创建直接ByteBuffer的理由是什么?