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 <jni.h>#include "Main.h"JNIEXPORT jint JNICALL Java_Main_intMethod( JNIEnv *env, jobject obj, jint i) { return i * i;}
编译并运行 :
javac Main.javajavah -jni Maingcc -shared -fpic -o libMain.so -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux Main.cjava -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函数?
GitHub上的示例供您使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)