NDK开发 缓存的应用

全局变量,局部变量,弱引用变量的生成与删除

jobject NewGlobalRef(jobject obj)   全局
jobject NewLocalRef(jobject obj)    局部
jobject new WeakGlobalRef(jobject obj)  弱引用

这个方法可以判断对象是否被回收
只需要把obj2变成NULL
jboolean IsSameObeject(jobject obj1, jobject jobj2)

native的缓存方式

1.static的方式

// c++中的缓存方法
extern "C"
JNIEXPORT void JNICALL
Java_com_univer_androidyellowbook_JniDemo_cache(JNIEnv *env, jobject thiz) {
    // 只被执行一次
    static jfieldID fieldId_string = NULL;
    jclass clazz = env->GetObjectClass(thiz);
    if(fieldId_string == NULL){
        fieldId_string = env->GetFieldID(clazz, "string", "Ljava/lang/String;");
    }
}

2.全局变量的方式

// global variable
jfieldID g_propInt_id = 0;
jfieldID g_propStr_id = 0;

extern "C"
JNIEXPORT void JNICALL
Java_com_univer_androidyellowbook_JniDemo_initNative(JNIEnv *env, jclass clazz) {
    // TODO: implement initNative()
    g_propInt_id = env->GetFieldID(clazz, "propInt", "I");
    g_propStr_id = env->GetFieldID(clazz, "propStr", "Ljava/lang/String;");
}

总结,主要介绍了两种缓存方式,因为c++里没有需要考虑内存泄露的问题,所以我们在开发的时候也需要考虑是否能够缓存的方式去节约一些不必要的内存开销

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值