Android JNI全局参考的微妙之处
Android JNI Global Reference Subtleties
好了,根据Cpp
的步骤- 使用jni创建字典
- 使字典的job对象返回为一个globalref
- 使用jni调用返回对象的Java方法(我们将此对象称为* a *)
- 将*A*添加到字典中,而不使ref *A*全局
*A*的寿命是多少?
我的期望如下。字典本身是全局的,因此受到垃圾收集的保护,当我从jni *A*调用'Add'方法时被传递回java',然后字典将保存对它的新引用,保护它也免受垃圾收集。所以我希望*A*和字典一样长(忽略外部干扰)。
我讲对了吗?谢谢。
当我从jni 调用'Add'方法时,A被传递回' java',然后字典将保存对它的新引用,保护它不受垃圾收集。
。您正在合并本地引用和全局引用的两个属性。本地引用仅在创建它的JNI调用期间有效。在那之后,它就无效了。如果您想在随后的JNI调用中再次使用它,请将其设置为GlobalRef.
所以我希望A和字典一样长(忽略外部干扰)。
可以,但是引用本身已经无效,所以无论如何你都不能使用它。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何创建一个空的全局类并在启动时实例化它
- 内联函数中具有内部链接的全局变量
- 通过JNI传递数据数组的最快方法是什么
- 为什么虚函数不能是静态的和全局的?
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局作用域中函数指针的赋值
- g++用户定义的动态链接库上的全局new和delete运算符
- 在命名空间中使用全局命名空间中的函数
- 全局变量 多读取器 一个写入器多线程安全?
- Java 和 JNI 全局变量
- JNI返回Java对象,可以返回本地参考,还是必须是全局
- JNI检测到应用程序中的错误:使用已删除的弱全局参考
- JNI/Android NDK-维护全局对象引用
- JNI中如何处理全局变量
- JNI保留对对象的全局引用,并使用其他JNI方法访问它.在多个JNI调用中保持C++对象的活动状态
- Android JNI全局参考的微妙之处