[toc]
Java Native
Java Call Native:底层都是基于 JNI
比较:https://github.com/jnr/jnr-ffi/blob/master/docs/ComparisonToSimilarProjects.md
Native Call Java:底层都是基于 JNI.
- JNI, JavaCPP.
JNI(C)
标准的 Java native通信工具,但复杂度高,需要很多native code到java的回调。
详见 JNI 使用文档
- 性能最好,但是使用比较复杂;
JNA(C)
https://github.com/java-native-access/jna
- 基于libffi;基于反射,数据转换从本地代码跳到 Java 代码非常昂贵;
- 不需要 JNI 代码 ,只需要定义接口和函数(匹配);
- 相较于JNR,更为成熟;
JNR(C)
https://github.com/jnr/jnr-ffi
- 基于libffi,但使用字节码生成技术而不是反射;
- 不需要JNI代码 ,只需要定义接口和函数(匹配);
Project Panama(C)
JDK 19 :JEP 424: Foreign Function & Memory API (Preview) (openjdk.org)
JDK 20 :JEP 434: Foreign Function & Memory API (Second Preview) (openjdk.org)
JavaCPP(C++)
JavaCPP provides efficient access to native C++ inside Java, also access Java from C++.