Jni OnLoad()和OnUnload()


除了前面說的自定義JNI函數之外,JNI還提供了兩個特殊函數,它們是JNI_OnLoad()和JNI_OnUnload(),分別在加載庫和卸載庫的時候調用。

1、JNI_OnLoad()

 Java調用System.loadLibrary()加載一個庫的時候,會首先在庫中搜索JNI_OnLoad()函數,如果該函數存在,則執行它;
 JNI_OnLoad()的作用主要有幾點:
 1、告訴JVM,這個庫需要要求使用的JNI版本是什么
 2、執行初始化操作
 3、將JavaVM參數保存為全局對象,方便以后在任何地方獲取JNIEnv對象(后面會介紹)
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
    JNIEnv *env = NULL;
    jint result = -1;

    if (jvm->GetEnv((void **) &env, JNI_VERSION_1_4) != JNI_OK) {
        return -1;
    }

    result = JNI_VERSION_1_4;
    return result;
}

如果一個庫不存在JNI_OnLoad()函數,那么JVM默認會使用最老版本的JNI,即1.1。

 JNI_OnLoad方法在每一個庫中只能存在一個。
2、JNI_OnUnload()
 According to the JNI documentation, it will be called when the classloader that loaded the libarary is garbage collected. 
 根據JNI文檔的描述,當GC回收了加載這個庫的ClassLoader時,該函數被調用
JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved)
{
    //TODO-
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM