小编典典
Java中的本机方法是什么,应在哪里使用?
一旦看到一个小例子,就很清楚了:
Main.java :
public class Main {
public native int intMethod(int i);
public static void main(String[] args) {
System.loadLibrary("Main");
System.out.println(new Main().intMethod(2));
}
}
Main.c :
#include
#include "Main.h"
JNIEXPORT jint JNICALL Java_Main_intMethod(
JNIEnv *env, jobject obj, jint i) {
return i * i;
}
编译并运行 :
javac Main.java
javah -jni Main
gcc -shared -fpic -o libMain.so -I${JAVA_HOME}/include \
-I${JAVA_HOME}/include/linux Main.c
java -Djava.library.path=. Main
输出 :
4
在Ubuntu 14.04上使用Oracle JDK 1.8.0_45进行了测试。
因此很明显,它允许您执行以下操作:
使用Java中的任意汇编代码调用经过编译的动态加载的库(此处用C编写)
并将结果返回Java
这可以用来:
使用更好的CPU组装指令在关键部分上编写更快的代码(非CPU可移植)
进行直接系统调用(非OS便携式)
以降低便携性为代价。
也可以从C调用Java,但是必须首先在C中创建JVM:如何从C++调用Java函数?
2020-09-11