Java中的本机方法是什么,应在哪里使用?
本机方法与抽象方法具有相同的语法,但是在哪里实现呢?
回答:
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));
}
}
:
#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 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函数?
GitHub上的示例供您使用。
以上是 Java中的本机方法是什么,应在哪里使用? 的全部内容, 来源链接: utcz.com/qa/397539.html