JNI
Java侧使用Native方法:
1.加载对应的JNI库
2.声明由native修饰的函数
java 函数找到jni函数的方法
1.静态注册:先通过函数名,找到后,保存函数指针
2.动态注册,registerNativeMethods()(在JNI_ONLoad中动态注册)
JNI层调用Java方法:
通过JNIEnv调用callVoidMethoid方法
JNIEvn
虚拟机在JNI的代表,每个进程只有一个JNIEvn;与线程相关,线程间不能共享JNIEvn
作用:调用Java函数,操作Java对象
通过javaVM的attash... 和ditash...分别获取和释放JNIEnv结构体
jfieldID,jmethodID分别取出java类的成员变量和方法
垃圾回收
(**将Java对象的指针赋值给jNI层,该指针的引用计数不会增加)
JNI提供的三中类型引用:
全局引用(不会被释放,需要主动释放),本地引用(JNI层函数返回,对象销毁(注意点:最好立即释放)),弱全局引用(使用之前调用)
JNI中的异常处理
发生异常后不会中断函数执行。
提供三种方法处理异常:ExceptionOccured(判断是否有异常发生),ExceptionClear用来清除异常,ThrowNew(向java层抛出异常)