我正在使用JNI从C ++访问一些Java代码。必须清除JNI返回的对象引用,但是如果多个方法返回相同的Java对象会发生什么?我是否需要在每个人上调用删除?
例如。 java.nio.Buffer
有一个方法clear()
清除缓冲区并返回自己。
如果我首先使用JNI创建缓冲区,然后调用clear()
,我是否需要清理jobjects
,或者我只清理其中一个?
在JNI中,您有Java对象和Java对象引用。 jobject
是指向Java对象的对象引用,如果您不再需要它,可以使用DeleteLocalRef
进行释放。
在clear()
对象上调用Buffer
将为返回的对象创建一个新的引用,即使它实际指向同一个对象。所以,是的,如果你用完本地参考,你应该释放你的Buffer
的所有引用,但你正在使用的那个。