[英]How to free memory allocated by native method on Java side?
我试图将字节数组(带有随机数据)从本地传递到Java,但不确定是否导致任何内存泄漏。 这是C ++代码。
JNIEXPORT jbyteArray JNICALL Java_com_sample_test_jni_TestJNI_return_1byte_1array
(JNIEnv *env, jobject obj) {
unsigned char *byteArray = new unsigned char[LENGTH];
srand(12345);
for(int i = 0;i < LENGTH;i++) {
byteArray[i] = rand() % 64;
}
jbyteArray data = (env)->NewByteArray(LENGTH);
env->SetByteArrayRegion(data, 0, LENGTH, (jbyte*)byteArray);
delete(byteArray);
return data;
}
这是Java代码。
class TestJNI {
static {
System.loadLibrary("foobar");
}
public native byte[] return_byte_array();
public static void main(String[] args) {
byte[] data = new TestJNI().return_byte_array();
System.out.println("Data length " + data.length);
}
}
我的疑问是,在本机代码中分配的jbytearray是否将由Java进行垃圾回收。 我不能在本地释放它。
另外,有没有好的文档以示例描述JNI内存管理?
Java GC应该清除您分配的所有对象。
有关更多详细信息,请参见此答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.