jni NewByteArray在哪里释放已分配的内存

时间:2015-08-09 17:52:04

标签: java c java-native-interface

我有一个调用实例方法的jni函数。此函数将字节数组传递给java端,如下面的伪代码。我是否需要在DeleteLocalRef方面ReleaseByteArrayElementsC,我应该在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??
}

1 个答案:

答案 0 :(得分:1)

  

我是否需要C侧的DeleteLocalRef和ReleaseByteArrayElements

是的,否则你可能会超过JNI代码中的本地参考表,我相信这只是20大。

  

我应该在Java方面做些什么?

在Java方面你无能为力。在Java回调执行时,调用方法仍保留引用。