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

标签 java c java-native-interface

我有一个调用实例方法的 jni 函数。此函数将一个字节数组传递给 java 端,如下伪代码所示。我是否需要在 C 端执行 DeleteLocalRefReleaseByteArrayElements,在 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/

相关文章:

java - 在 java 中为方法 drawImage() 更改图像的 alpha

c - 内存对齐64是什么意思?是不是地址间隔64字节?

java - 使用 JNI 将字符串从 C 发送到 Java

java - android项目的巨大java类,如何拆分它?

java - setSupportActionBar 无法应用(android.widget.Toolbar)错误

java - Android:以编程方式使背景波纹化

mysql - 使用 C 执行插入查询

c - 短路评估是替代看似微不足道的 if 语句的好习惯吗?

java - 如何同步从 java 传递到 c++ 的 c++ 中的 java 对象?

android - 将 IplImage 显示为 Android 位图