我在查找同一主题(jobjectArray
发布)时偶然发现了这个问题,我注意到@Seva 提供的答案并不完整。
您可以jobjectArray LocalRef
像其他任何 一样删除LocalRef
,使用:
env->DeleteLocalRef(the_array);
// OR
(*env)->DeleteLocalRef(env, the_array);
当然,与任何其他 一样LocalRef
,您可以避免手动删除并依靠 GC 为您执行魔法,但如果您在同一个 JNI 函数中需要其中的许多,或者,例如,您正在运行一个分配新的循环JNILocalRef
并且您不会删除它们,一旦它们超出表限制(非常低,设置为 512),您将度过一段糟糕的时光。
笔记
如果您要手动删除数组引用,您需要记住DeleteLocalRef
a 上的函数jobjectArray
不会释放其子元素。
因此,当您使用时,jobjectArray
您需要跟踪元素或遍历所有元素并一一删除。
原始数组也是如此,但对于这些你有
env->Release<Primitive>ArrayElements(the_array,
the_elements_to_remove,
release_mode);
// OR
(*env)->Release<Primitive>ArrayElements(env,
the_array,
the_elements_to_remove,
release_mode);