通过 jni NewByteArray 在何处释放分配的内存
Where to free allocated memory by jni NewByteArray
我有一个调用实例方法的 jni 函数。此函数将一个字节数组传递到 java 端,如下伪代码所示。我需要DeleteLocalRef
和ReleaseByteArrayElements
在C
边吗?我应该在Java
边做什么?
// C side
func() {
while(something) {
jbyteArray array = NewByteArray();
// pass c side array as parameter to the java side
callInstanceMethod(array);
// delete and relase here?
}
}
// Java side
method(byte[] array) {
// delete array??
}
Do I need to DeleteLocalRef and ReleaseByteArrayElements in C side
是的,否则你可能会超出 JNI 代码中的本地引用 table,我相信它只有 20 个大。
and what should I do in the Java side?
Java 方面您无能为力。在执行 Java 回调时,调用方法仍然持有一个引用。
我有一个调用实例方法的 jni 函数。此函数将一个字节数组传递到 java 端,如下伪代码所示。我需要DeleteLocalRef
和ReleaseByteArrayElements
在C
边吗?我应该在Java
边做什么?
// C side
func() {
while(something) {
jbyteArray array = NewByteArray();
// pass c side array as parameter to the java side
callInstanceMethod(array);
// delete and relase here?
}
}
// Java side
method(byte[] array) {
// delete array??
}
Do I need to DeleteLocalRef and ReleaseByteArrayElements in C side
是的,否则你可能会超出 JNI 代码中的本地引用 table,我相信它只有 20 个大。
and what should I do in the Java side?
Java 方面您无能为力。在执行 Java 回调时,调用方法仍然持有一个引用。