Java Native Interface(一)
最近在整理学习笔记的时候发现了去年年中记录的 JNI 学习笔记,由于存放在了为知笔记中,而如今为知笔记已经不再免费,于是想到了将其重新整理一遍,一来可以巩固所学,二来能将其迁移到本地
1 简介
有时候,使用 native code(c/c++)来克服 Java 中的内存管理和性能的局限性是很有必要的。Java 支持 native codes,被称作 Java Native Interface(JNI)。
JNI 非常难,毕竟它牵涉到了两种编程语言。假设聪明的你对 Java 和 C/C++以及 GCC 编译器已经有所了解。那么下面就一起来一步步学习 JNI 吧。
2 开始
2.1 用 c 语言实现第一个 JNI 程序
Step1: 创建一个名字为 JNITest.java 的文件
public class JNITest {
static {
System.load("/home/ubuntu/workspace/java/jni/mynativelib.so");
}
//申明一个无参的native方法,而且返回空
public native void greet();
//测试
public static void main(String[] args) {
JNITest test = new JNITest();
test.greet();
}
}首先用静态代码块加载本地动态链接库"mynativelib.so"。对于静态代码块,我相信写过 Java 的你应该非常清楚,它只会在类被加载的时候执行一次。这个动态链接库会被添加到 Java 的 library path(保存在 Java 系统变量 java.library.path)中,如果加载失败,就会抛出UnsatisfiedLinkError异常。也可以使用 JVM 启动参数来加载该动态链接库到 Java 的 library path 当中:
