JNI( java native interface)
JNI Java本地方法调用接口,很明显是用来调用非java方法的接口,通过JNI我们可以调用本地的c/c++ 方法,从而实现高效的操作。C/C++是通过调用系统级的API进行操作,与系统指令密切相关。这里也可以看出C/C++的高效原因,java则是一次写,到处运行,跨平台的高级语言。
由于java的跨平台特性,也造就 了运行的效率不如C/C++。在某些高效操作方面,java就可以通过直接调用C、C++的函数提升关键代码的性能。
JNI 是如何调用C、C++提供的函数呢?
java中标记为native的方法俗称本地方法,就是通过JNI 调用。
jvm通过将native方法链接到C 函数上,进行调用。
那么是怎么链接的呢?
二种方式。
jvm 通过自动查找找到按照一定命名规范的C函数,进行链接。
package demo; public class Test { public native void add(int i,String s); public native void add2(String s); }命名规范上述本地方法名就是 Java_com_demo_Test_add_i. 以Java_为前缀,跟完整的包的类名,方法名。.则使用_代替,如果原来方法有下划线则_使用_1代替。引用类型参数为_2.
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class demo_Test */ #ifndef _Included_demo_Test #define _Included_demo_Test #ifdef __cplusplus extern "C" { #endif /* * Class: demo_Test * Method: add * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_demo_Test_add (JNIEnv *, jobject, jint, jstring); JNIEXPORT void JNICALL Java_demo_Test_add2 (JNIEnv *, jobject, jstring); #ifdef __cplusplus } #endif #endif2、在C代码中主动链接。
版权声明:本文为m0_37948170原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。