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

Java jni NewByteArray在何处释放分配的内存,java,c,java-native-interface,Java,C,Java Native Interface,我有一个调用实例方法的jni函数。此函数将字节数组传递给java端,如下伪代码所示。我是否需要在C端中DeleteLocalRef和ReleaseByteArrayElements以及在Java端应该做什么 // C side func() { while(something) { jbyteArray array = NewByteArray(); // pass c side array as parameter to the java side callInst

我有一个调用实例方法的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??
}
是否需要在C端删除LocalRef和ReleaseByteArrayElements

是的,否则您可能会超过JNI代码中的本地引用表,我相信它只有20个大的

在Java端我应该做什么


在Java方面,您无法做任何事情。在执行Java回调时,调用方法仍保留引用。

谢谢。你是说只删除LocalRef还是两者都删除?只删除LocalRef。只有在调用GetByteArrayElements时才调用ReleaseBytearArrayElements。