设为首页 加入收藏

TOP

Android - 编写强引用Java对象
2014-11-24 12:46:55 来源: 作者: 【 】 浏览:0
Tags:Android 编写 引用 Java 对象

JAVA有个垃圾回收机制,没有引用的对象会被虚拟机在整理内存时进行回收,所以使用弱引用java对象时,而实际调用为持久对象时将会出现问题。并且这个问题有时会随机出现,这个会内存整理回收时机有关。


下面,说下对于在JNI中使用JAVA中对象代码编写方法:


JAVA类方法编写:


JNI 编写方法:


在JNI中提供三种类型的引用:


1、Local Reference 本地引用,函数调用时传入jobject或者jni函数创建的jobejct,其特点就是一旦JNI层函数返回,jobject就被垃圾回收掉,所以需要注意其生命周期。可以强制调用DeleteLocalRef进行立即回收。


jstring pathStr = env->NewStringUTF(path)


....


env->DeleteLocalRef(pathStr);


2、Global Reference 全局引用 ,这种对象如不主动释放,它永远都不会被垃圾回收


创建: env->NewGlobalRef(obj);


释放: env->DeleteGlobalRef(obj)


3、Weak Global Reference 弱全局引用,一种特殊的 Global Reference ,在运行过程中可能被垃圾回收掉,所以使用时请务必注意其生命周期及随时可能被垃圾回收掉,比如内存不足时。


使用前可以利用JNIEnv的 IsSameObject 进行判定它是否被回收


env->IsSameObject(obj1,obj2);


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 通过 surface jni层播放y.. 下一篇Android事件监听器(Event Listen..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)