我有一个调用实例方法的 jni 函数。此函数将一个字节数组传递给 java 端,如下伪代码所示。我是否需要在 C
端执行 DeleteLocalRef
和 ReleaseByteArrayElements
,在 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 代码中的本地引用表,我相信它只有 20 个大。
and what should I do in the Java side?
在 Java 方面您无能为力。当 Java 回调执行时,调用方法仍然持有一个引用。
关于java - 通过 jni NewByteArray 在何处释放分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907157/