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层抛出异常)

posted @ 2019-12-17 12:09  无解的不等式  阅读(419)  评论(0编辑  收藏  举报