我正在尝试将字节数组(带有随机数据)从 native 传递到 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);
}
}
我怀疑在 native 代码中分配的 jbytearray 是否会被 Java 垃圾收集。我无法在本地释放它。
此外,是否有很好的文档通过示例描述 JNI 内存管理?
最佳答案
Java GC 应该清理您分配的所有对象。
参见 this answer了解更多详情。
关于java - 如何释放 Java 端本地方法分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30634790/