JNI简介
JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植;从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互
本地代码与 Java 虚拟机之间是通过 JNI 函数实现相互操作的;JNI 函数通过接口指针来获得,本地方法将 JNI 接口指针当作参数来接受;虚拟机保证在从相同的 Java 线程中对本地方法进行多次调用时,传递给本地方法的接口指针是相同的,本地方法被不同的 Java 线程调用时,它接受不同的 JNI接口指针
使用JNI和算法进行交互,主要是为了提高算法的性能,最大化的利用机器硬件资源
JNI技术原理
JNI是Java NativeInterface(Java本地接口)的缩写;JNI作为java和操作系统间的一个直接接口,可以通过JNI使得java直接调用操作系统的资源
目前JNI只能通过c/C++实现,因为jni只是对操作系统资源调用的一个桥接过程;所以理论上在windows下只要是dll文件均可以被调用;java代码编译之后是运行在一个jvm里,所以java的任何操作对操作系统而言都是隔着一层虚拟机外壳,这点也正是java的优点,帮助java实现了“Write Once, Run Everywhere”的可移植性
但是使用了jni之后必须要明白这个“Write Once, Run Everywhere”要被打破,必须要实现不同的操作系统的各种jni版本
JNI的开发调用过程可以用下图来完整表示:
JNI 基本数据类型
JNI中数据类型分为两种,一种是基础数据类型,另一种是引用类型;在调用Java native方法将实参传递给C/C++函数的时候,会自动将java形参的数据类型自动转换成C/C++相应的数据类型,所以我们在写JNI程序的时候,必须要明白它们之间数据类型的对应关系;下面先介绍基础数据类型
JNI中的基本类型也称为Native基本类型
Java基本数据类型与JNI数据类型的映射关系如下:
Java数据类型 | JNI数据类型 | C/C++数 |
---|