日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2025/7/14 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 缓存策略的全部內容,希望文章能夠幫你解決所遇到的問題。

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