通过 jni NewByteArray 在何处释放分配的内存

Where to free allocated memory by jni NewByteArray

我有一个调用实例方法的 jni 函数。此函数将一个字节数组传递到 java 端,如下伪代码所示。我需要DeleteLocalRefReleaseByteArrayElementsC边吗?我应该在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 回调时,调用方法仍然持有一个引用。