名词解释:
JNI是什么:JNI是Java Native Interface的缩写,提供了若干API实现了Java和其他语言的通信(主要是C&C++)。
为什么要用JNI:在C/C++中写的程序可以避开JVM的内存开销过大的限制、处理高性能的计算、调用系统服务(例如驱动)等功能。
JVM: jvm是java虚拟机在jni层的代表,全局只有一个。
JNIENV: 代表了java在本线程的运行环境,每个线程都有一个。
JOBJECT: 在JNI中除了基本类型数组、Class、String和Throwable外其余所有Java对象的数据类型在JNI中都用jobject表示
JNI工作原理:
如图:
1. java层调用system.load方法。
2. 通过classloader拿到了so的绝对路径,然后调用nativeload()方法。
3. 通过linux下的dlopen方法,加载并查找so库里的方法,如有jni_onload会优先加载。
4. 当前线程下的jnienv会将所有的jni方法注册到了同一个vm中,so和class到了同一个进程空间。
5. 通过当前线程的jnienv即可调用对应的对象方法了。