page contents

解释一下 JNI 中全局引用和局部引用的区别和使用?

轩辕小不懂 发布于 2022-07-28 15:19
阅读 683
收藏 0
分类:开发环境
3975
Nen
Nen
- 程序员

全局引用

通过 NewGlobalRef 和 DeleteGlobalRef 方法创建和释放一个全局引用。

全局引用能在多个线程中被使用,且不会被 GC 回收,只能手动释放。

局部引用

通过 NewLocalRef 和 DeleteLocalRef 方法创建和释放一个局部引用。


局部引用只在创建它的 native 方法中有效,包括其调用的其它函数中有效。因此我们不能寄望于将一个局部引用直接保存在全局变量中下次使用(请使用全局引用实现该需求)。

我们可以不用删除局部引用,它们会在 native 方法返回时全部自动释放,但是建议对于不再使用的局部引用手动释放,避免内存过度使用。

扩展:弱全局引用

通过 NewWeakGlobalRef 和 DeleteWeakGlobalRef 创建和释放一个弱全局引用。

弱全局引用类似于全局引用,唯一的区别是它不会阻止被 GC 回收。

请先 登录 后评论