引入一个 API,Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即 JVM 之外的代码)和安全地访问外部内存(即不受 JVM 管理的内存),使 Java 程序能够调用本机库并处理本机数据,而不会出现像JNI一样脆弱和危险。
新的 API 正在 Project Panama 中开发,目的是取代自 Java 1.1 以来已成为平台一部分的 JNI(Java 本地接口)。 JNI 允许从 Java 调用 C 代码。用过 JNI 的人都知道:JNI 实现起来非常复杂,容易出错,速度慢。
新 API 的目标是将实施工作量减少 90%,并将 API 性能提高 4 到 5 倍。
JEP 419 对 API 进行了广泛的更改。由于这在孵化器阶段经常发生,所以一旦它进入预览阶段,我们将详细介绍该功能。
这是一个孵化功能;需要添加 --add-modules jdk.incubator.foreign
来编译和运行 Java 代码,Java 18 改进了相关 API ,使之更加简单易用。
历史
- Java 14 JEP 370 (opens new window) (opens new window)引入了外部内存访问 API(孵化器)。
- Java 15 JEP 383 (opens new window) (opens new window)引入了外部内存访问 API(第二孵化器)。
- Java 16 JEP 389 (opens new window) (opens new window)引入了外部链接器 API(孵化器)。
- Java 16 JEP 393 (opens new window) (opens new window)引入了外部内存访问 API(第三孵化器)。
- Java 17 JEP 412 (opens new window) (opens new window)引入了外部函数和内存 API(孵化器)。