文章目录

  • I . 全局引用
  • II . 创建全局引用 ( NewGlobalRef )
  • III . 全局引用代码示例

I . 全局引用


1 . 全局引用作用域 :

与局部引用对比 : 全局引用与局部引用相对应 , 其作用域是全局的 , 局部引用只能在当前方法使用 ;

空间 : 可以 跨方法 , 跨线程使用 ;

时间 : 创建后可以使用 , 手动释放后全局引用失效 ; ( 手动释放前全局可用 )

2 . 全局引用 内存回收 : 全局引用 与 局部引用 均不会被 JVM 自动回收 , 如果内存不足 , JVM 宁可抛出 OOM 异常 , 也不会回收这些内存 ;

3 . 全局引用相关方法 :

① 创建全局引用 : NewGlobalRef ;

② 释放全局引用 : DeleteGlobalRef ;

II . 创建全局引用 ( NewGlobalRef )


1 . 函数原型 : 传入一个局部引用参数 , 将局部引用转为全局引用 ;

返回值 : 由局部引用转换成的全局引用 ;

参数 :

  • jobject obj : 使用 NewXXX / FindXXX 等 大多数 JNI 方法 默认创建的 Java 引用类型对象 都是局部引用 ;
struct _JNIEnv {/* _JNIEnv  结构体中封装了 JNINativeInterface 结构体指针 */const struct JNINativeInterface* functions;...// 最终 调用的 还是 JNINativeInterface 结构体中封装的 NewGlobalRef 方法jobject NewGlobalRef(jobject obj){ return functions->NewGlobalRef(this, obj); }...
}

III . 全局引用代码示例


全局引用代码示例:

// 全局引用
//  访问时如果局部变量也有同名变量 , 可以使用 域作用符 访问
//  ::class_teacher 表示访问全局的变量
jclass class_teacher_global;extern "C"
JNIEXPORT void JNICALL
Java_kim_hsl_jni_MainActivity_jniGlobalReferenceTest(JNIEnv *env, jobject instance) {/*全局引用 作用域 :空间 : 可以 跨方法 , 跨线程使用时间 : 创建后可以使用 , 手动释放后全局引用失效全局引用创建 : NewGlobalRef全局引用释放 : DeleteGlobalRef全局引用会阻止 JVM 回收该引用这里注意域作用符的使用 , 本方法中没有 class_teacher_global 同名变量 , :: 可用 可 不用*/// 1 . 获取 Teacher 类 ( 该变量需要释放 )if(::class_teacher_global == NULL) {//生成局部引用 , 该局部引用使用完毕后可释放jclass tmp_class = env->FindClass("kim/hsl/jni/Teacher");//将上述生成的局部引用变成 全局引用//      全局引用释放时 , env->DeleteGlobalRef(class_teacher_global) 即可释放下面转换的 全局引用::class_teacher_global = static_cast<jclass>(env->NewGlobalRef(tmp_class));//将局部引用释放掉env->DeleteLocalRef(tmp_class);}
}

【Android NDK 开发】JNI 引用 ( 全局引用 | NewGlobalRef | DeleteGlobalRef )相关推荐

  1. 【Android NDK 开发】JNI 方法解析 ( JNIEnv *env 参数 )

    文章目录 一. JNI 方法解析 二. JNIEnv *env 参数解析 三. C 语言 环境中 JNIEnv *env 参数解析 四. C ++ 环境中 JNIEnv *env 参数解析 总结 : ...

  2. Android 高级开发 JNI NDK 介绍与使用

    Android 高级开发 JNI & NDK 介绍与使用 前言 对于没接触过的领域,即是挑战也是机遇,不仅能够提升自己的能力.还能够学习到新的技术知识 而学习新的技术的时候,最好是从头开始按照 ...

  3. Android NDK开发之旅(3): 详解JNI数据类型与C/C++、Java之间的互调

    Android NDK开发之旅(3):详解JNI数据类型与C/C++.Java之间的互调 (码字不易,转载请声明出处:http://blog.csdn.net/andrexpert/article/d ...

  4. Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发

    Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...

  5. 安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】

    Android Studio开发JNI示例:https://blog.csdn.net/wzhseu/article/details/79683045 JNI_动态注册_静态注册.zip : http ...

  6. 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )

    文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...

  7. Android NDK开发(三)——常见错误集锦以及LOG使用,androidndk

    Android NDK开发(三)--常见错误集锦以及LOG使用,androidndk 转载请注明出处:http://blog.csdn.net/allen315410/article/details/ ...

  8. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  9. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

最新文章

  1. 前端开发面试题总结之——JAVASCRIPT(一)
  2. JMM同步原语之final域的内存语义
  3. echart 多柱图只显示部分数据标签_python|读取Excel生成pyecharts动态分析图
  4. 学习 SpringCloud 五大组件后的总结 一
  5. 如何白嫖CSDN会员?
  6. 【Oracle】Oracle错误编码大全
  7. 有什么做电音的软件?3款好用App让你爱上唱歌
  8. 运营商5G商业模式研究
  9. 计算机中h是几进制,16进制后面用H表示,其他进制的用什么表示
  10. android、ios、windows等平台回声消除的解决方案
  11. 计算机配置音箱便宜,电脑音箱买什么价位的好 六款适合不同群体的音箱推荐...
  12. 重磅!中国首家互联网银行联手腾讯、华为各大APP,最高5万额度,疯狂提额100亿!!!...
  13. 计算机教学拼音打字教案,三年级下册信息技术课用拼音写汉字教案
  14. 深圳关内主要旅游景点地址和公交路线
  15. Web安全 -- 信息收集(上)
  16. 赋值运算符重载和拷贝构造函数
  17. Java多线程模拟实现LOL中薇恩、死歌、剑圣的操作
  18. PyTorch深度学习实践(b站刘二大人)P6讲 逻辑斯蒂回归 Logistic Regression
  19. 【Dest0g3 520迎新赛】密码学部分Wp及LCG(线性同余生成器)攻击方法
  20. Centos 配置阿里yum源

热门文章

  1. 黑马vue---14、v-model双向绑定
  2. Python进阶-----property用法(实现了get,set,delete三种方法)
  3. Jzoj4458 密钥破解——Pollard-rho
  4. eclipse的安装和用VS进行单元测试
  5. Android之Providing Resources(提供资源)
  6. C# 集合类(四):Hashtable
  7. 如何在SharePoint2007中实现下拉列表(DropDownList)的级联菜单效果
  8. Castle ActiveRecord学习实践(1):快速入门指南
  9. Devexpress的Datalayout控件
  10. 用流读取文件中的内容