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
使用Oracle JDK 1.8.0_45testingUbuntu 14.04。
所以很明显,它可以让你:
使用Java中的任意汇编代码调用一个编译的dynamic加载的库(这里用C编写)
并将结果返回到Java
这可以用来:
在关键部分使用更好的CPU汇编指令编写更快的代码(不是CPU便携式)
直接进行系统调用(不是OS便携式)
与便携性较低的权衡。
您也可以从C中调用Java,但是您必须先在C中创build一个JVM: 如何从C ++调用Java函数?
在GitHub上的例子 ,你玩。