NDK学习笔记-JNI的引用
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                NDK学习笔记-JNI的引用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                JNI中的引用意在告知虛擬機何時回收一個JNI變量
JNI引用變量分為局部引用和全局引用
局部引用
局部引用,通過DeletLocalRef手動釋放對象
原因
- 訪問一個很大的Java對象,使用之后還用進行復雜的耗時操作
 - 創建了大量的局部引用,占用了太多的內存,而且這些局部引用跟后面的操作沒有關聯性
 
局部引用示例
Java中存在native方法
public native void localRef();在native中有調用對象,但對象在使用以后就不再使用,此時就可以將對象釋放掉,以節約內存
 此處舉一個循環創建數組的,數組中建立對象的例子
全局引用
共享(可以跨多個線程),手動控制內存使用
 此處通過創建一個字符串來說明,native中存在一個全局變量jstring global_str;
創建
Java
public native void createGlobalRef();C
JNIEXPORT void JNICALL Java_com_cj5785_jni_JniTest_createGlobalRef (JNIEnv *env, jobject jobj) {jstring lobj = (*env)->NewStringUTF(env, "jni golbal test");global_str = (*env)->NewGlobalRef(env, lobj); }獲取
Java
public native String getGlobalRef();C
JNIEXPORT jstring JNICALL Java_com_cj5785_jni_JniTest_getGlobalRef (JNIEnv *env, jobject jobj) {return global_str; }釋放
Java
public native void deleteGlobalRef();C
JNIEXPORT void JNICALL Java_com_cj5785_jni_JniTest_deleteGlobalRef (JNIEnv *env, jobject jobj) {(*env)->DeleteGlobalRef(env, global_str); }弱全局引用
節省內存,在內存不足時,可以釋放所引用的對象
 可以引用一個不常用的對象,如果為NULL,臨時創建
 創建:NewWeakGlobalRef
 銷毀:DeleteGlobalWeakRef
轉載于:https://www.cnblogs.com/cj5785/p/10664678.html
總結
以上是生活随笔為你收集整理的NDK学习笔记-JNI的引用的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 第三次作业结队
 - 下一篇: 06 Jquery 基础