Project Panama 与 Foreign Function & Memory API

Project Panama 是 OpenJDK 下的长期项目,目标是在 JVM 与 C 等本地代码之间建立更安全、更符合 Java 习惯互操作层。其交付物中最核心、与 JNI 直接对标的是 Foreign Function & Memory API(下称 FFM API,包名 java.lang.foreign),在 JDK 22 随 JEP 454 正式定稿。 发音:英语读作 /ˈpænəmɑː/,音节大致为「帕-nuh-马」,与中美洲国家 Panama(巴拿马)相同。OpenJDK 以地峡(isthmus)比喻 JVM 与本地代码之间的桥梁,故取此名。 本文说明 Panama 解决什么问题、核心概念怎么用,以及与 JNI 的取舍。JDK 版本层面的变更见 JDK 21 升级到 JDK 25 的变更汇总。 Panama 是什么 Project Panama 不只 FFM API,还包括: 组件 作用 Foreign Function & Memory API 调用 C 函数、读写堆外内存 Vector API SIMD 向量计算(另一 JEP 线,本文不展开) jextract 从 C 头文件生成 Java 绑定 日常说的「用 Panama 替代 JNI」,通常指 FFM API:用纯 Java + 标准库完成原本需要 native 方法、javah 头文件和 C/C++ 胶水代码的工作。 ...

Created 19196-06-19 · Updated 19196-06-19 · 4 min · 721 words · -

Java JNI

Java 运行在虚拟机中,若要调用操作系统动态库,需声明 native 方法,再由 C/C++ 实现。Java 调用这些 native 方法,等价于调用本地代码中的函数。这套机制称为 JNI(Java Native Interface,Java 本地编程接口)。 Android NDK 开发同样建立在 JNI 之上。下文在纯 Java 环境下编译 C 动态库并用 Java 调用,由浅入深给出四个示例。原文参考:CSDN - u_xtian。 相关:System.load 与 System.loadLibrary、JNI 类型签名 [B [C 等。JDK 22 起可用 Project Panama / FFM API 替代多数 JNI 场景;版本变更见 JDK 21 升级到 JDK 25 的变更汇总。 示例一:Hello World Java:HelloJni.java public class HelloJni { static { System.loadLibrary("hello"); } public static native void sayHello(); public static void main(String[] args) { HelloJni.sayHello(); } } 生成头文件 javac HelloJni.java javah -jni HelloJni # 旧版工具;JDK 8+ 可用 javac -h . HelloJni.java 生成的 HelloJni.h: ...

Created 14146-04-14 · Updated 19196-06-19 · 5 min · 953 words · -