日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android NDK开发之旅14 JNI 缓存策略

發布時間:2025/7/14 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android NDK开发之旅14 JNI 缓存策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

###緩存策略

有兩種:

####一、使用局部的static變量:

JNIEXPORT void JNICALL Java_com_test_JniTest_cache (JNIEnv * env, jobject jobj){static jfieldID fid = NULL;jclass clz = (*env)->GetObjectClass(env, jobj);if (fid == NULL){fid = (*env)->GetFieldID(env, clz, "key", "Ljava/lang/String;");printf("fid inti once");} } 復制代碼

測試:

public native void cache();public static void main(String[] args) {JniTest test = new JniTest();for (int i = 0; i < 100; i++) {test.cache();} } 復制代碼

說明:

獲取jfieldID只獲取一次。局部靜態變量只能在本方法的作用域中使用。

也可以搞個全局,但是fid不同函數可以使用,但是值不一樣,值很難統一。因此官方推薦局部的。

局部靜態變量的生命周期:

  • 初始化,函數第一次執行
  • 結束,作用域被銷毀了,但是這個變量還會存在內存當中,直到程序結束。
  • ####二、動態庫加載的時候初始化全局變量

    public static native void initIds();static {System.loadLibrary("JniTest");initIds(); }public static void main(String[] args) {JniTest test = new JniTest();for (int i = 0; i < 100; i++) {test.cache();} } 復制代碼

    C代碼如下:

    //初始化兩個全局變量,動態庫加載完成之后,立刻緩存起來 //以后可以在其他函數使用,聲明周期也是跟應用程序(進程)一致 jfieldID key_fid; jmethodID random_mid; JNIEXPORT void JNICALL Java_com_dongnaoedu_jni_JniTest_initIds(JNIEnv *env, jclass jcls){key_fid = (*env)->GetFieldID(env, jcls, "key", "Ljava/lang/String;");random_mid = (*env)->GetMethodID(env, jcls, "genRandomInt", "(I)I"); } 復制代碼

    如果覺得我的文字對你有所幫助的話,歡迎關注我的公眾號:

    我的群歡迎大家進來探討各種技術與非技術的話題,有興趣的朋友們加我私人微信huannan88,我拉你進群交(♂)流(♀)

    總結

    以上是生活随笔為你收集整理的Android NDK开发之旅14 JNI 缓存策略的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。