zoukankan      html  css  js  c++  java
  • 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-
    }
  • 相关阅读:
    桶排序
    基数排序
    计数排序
    归并排序
    快速排序
    优先级队列-堆实现
    堆排序
    红黑树
    【转】二叉树
    ubuntu 16.04 mysql 相关
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/10605745.html
Copyright © 2011-2022 走看看