Java 如何释放jbyteArray?

Java 如何释放jbyteArray?,java,java-native-interface,jnienv,Java,Java Native Interface,Jnienv,我的原生方法有一个返回值为byte[]的方法,所以我使用NewByteArray来分配byte[],然后使用return返回jbyteArray。 我应该释放jbyteArray吗?如何释放jbyteArray? 非常感谢。我是Java初学者,英语很差。您不想在本机方法中释放字节数组,因为本机方法的调用方希望在Java中使用数组 假设您不持有对所创建数组的全局引用: 然后,垃圾收集器可以在正确的时间删除数组对象,因为一旦方法返回,本机方法对数组的本地引用将被删除 下面是这样一个本机方法的示例:那

我的原生方法有一个返回值为byte[]的方法,所以我使用NewByteArray来分配byte[],然后使用return返回jbyteArray。 我应该释放jbyteArray吗?如何释放jbyteArray?
非常感谢。我是Java初学者,英语很差。

您不想在本机方法中释放字节数组,因为本机方法的调用方希望在Java中使用数组

假设您不持有对所创建数组的全局引用:

然后,垃圾收集器可以在正确的时间删除数组对象,因为一旦方法返回,本机方法对数组的本地引用将被删除


下面是这样一个本机方法的示例:

那么您的本机函数正在返回Java?如果是:否,除非使用NewGlobalRef创建了对数组的全局引用,否则本机代码中不需要执行任何特殊操作。您的意思是GC可以自动释放jbyteArray?所以我什么都不用做?谢谢。@cpdyj正如Michael指出的:除非您使用NewGlobalRefDoes创建了对数组的全局引用,否则这意味着分配给C非全局指针的内存将在Java代码中自动释放。因为没有对该指针的进一步引用。