在JNI中对同一对象的多个引用会发生什么?

时间:2019-04-08 20:45:37

标签: java-native-interface

我正在使用JNI从C ++访问一些Java代码。必须清除JNI返回的对象引用,但是如果多个方法返回相同的Java对象会怎样?我需要给每个电话打电话吗?

例如java.nio.Buffer使用方法clear()清除缓冲区并返回自身。

如果我首先使用JNI创建一个缓冲区,然后调用clear(),是否需要清理两个jobjects,还是只清理其中一个是好的?

1 个答案:

答案 0 :(得分:0)

在JNI中,您具有Java对象和Java对象引用。 jobject是指向Java对象的对象引用,如果不再需要它,可以使用DeleteLocalRef进行释放。

clear()对象上调用Buffer将为返回的对象创建一个新引用,即使它实际上指向同一对象。因此,是的,如果您用尽了本地引用,则应释放对Buffer的所有引用,但您正在使用的引用。