Java jni NewByteArray在何处释放分配的内存
我有一个调用实例方法的jni函数。此函数将字节数组传递给java端,如下伪代码所示。我是否需要在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
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。