NewGlobalRef / DeleteGlobalRef是否称为“递归”?

时间:2016-01-22 13:48:38

标签: android-ndk java-native-interface

一个非常基本的问题,但我没有在文档中的任何地方看到它的解释。假设我有jobject(或jclass)。我创建了一个全局引用(NewGlobalRef)并将其存储以供以后使用。然后我创建另一个并再次存储它。然后我删除第二个参考,然后删除第一个参考。它是否会像我预期的那样工作 - 确保对象保持活动状态,只要NewGlobalRef次调用的次数大于此对象的DeleteGlobalRef次调用次数,所有未删除的引用都有效?

1 个答案:

答案 0 :(得分:1)

是。

每个JNI全局和本地引用都是单个垃圾收集根。根指的是在标记和扫描期间被认为存活的第一个对象。单个对象可以有任意数量的JNI引用。

当然,对象可以引用其他对象,因此只是因为删除对象的所有JNI引用并不意味着它不再存在。

至于“递归”,我认为你的意思是别的。 JNI仅引用引用堆对象,而不是堆对象本身。所以,没有涉及递归。

进一步阅读IBM的Overview of JNI object references