news 2026/7/6 5:37:24

使用 JDK 26 FFM API 调用 C 语言原生函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 JDK 26 FFM API 调用 C 语言原生函数

据说从jdk22起java代码可以直接用FFM调用c函数,用一个demo测试下试试。

private static void testFFM() { //获取平台原生链接器(Windows 上可调用 msvcrt/ucrt,Linux/macOS 上调用 libc) Linker linker = Linker.nativeLinker(); //获取默认符号查找器,用于在标准 C 库中查找函数地址 SymbolLookup stdlib = linker.defaultLookup(); //查找 C 标准库函数 strlen(const char* s) -> size_t ,即在 C 标准库中查找 strlen 函数的内存地址 //find() 返回 Optional,如果找不到则抛出异常 MemorySegment strlenAddr = stdlib.find("strlen") .orElseThrow(() -> new RuntimeException("找不到 strlen 符号")); //描述 C 函数签名:返回值 long,参数为指针 FunctionDescriptor desc = FunctionDescriptor.of(ValueLayout.JAVA_LONG, ValueLayout.ADDRESS); // 生成一个方法句柄(MethodHandle),downcallHandle 的作用是将底层的 C 函数地址与 Java 的函数签名绑定,生成一个可以被 Java 代码像普通方法一样直接调用的句柄(Downcall) MethodHandle strlen = linker.downcallHandle(strlenAddr, desc); // 在 Arena 中分配 native 内存,写入 C 字符串并调用. // 使用 Arena(内存区域)来管理 Native 内存的生命周期 // ofConfined() 表示该内存区域是受限的,只能在当前线程中使用,且退出 try 块时自动释放 try (Arena arena = Arena.ofConfined()) { // 在 Native 内存中分配一个 C 字符串,并自动将 Java 字符串转换为 C 的格式(以 \0 结尾) MemorySegment cString = arena.allocateFrom("love u"); long length = (long) strlen.invoke(cString); System.out.println("strlen(\"love u\") = " + length); } catch (Throwable e) { throw new RuntimeException(e); } }

运行:

ok.

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 5:37:27

深度学习论文高效写作指南:一个月完成毕业设计的务实方法论

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 1. 先搞清楚“水一篇”和“能毕业”之间的真实距离 看到这个标题,很多研一同学可能会松一口气,觉得找到了捷径…

作者头像 李华
网站建设 2026/7/6 5:37:09

终极免费暗黑破坏神2存档编辑器:D2/D2R游戏存档修改完整指南

终极免费暗黑破坏神2存档编辑器:D2/D2R游戏存档修改完整指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾因暗黑破坏神2存档损坏而痛心?是否想测试不同角色build却不愿重新练级?d2…

作者头像 李华
网站建设 2026/7/6 5:28:56

Power BI热力图实战:用Matrix构建业务可读的二维数据洞察

1. 项目概述:这不是一张“彩色地图”,而是一套数据洞察的视觉翻译系统Power BI 中的 Heatmap(热力图)常被新手误认为只是“把表格颜色调得花哨一点”的装饰功能。我带过十几期 Power BI 实战训练营,几乎每期都有学员在…

作者头像 李华
网站建设 2026/7/6 5:27:30

Windows LSA保护与Skeleton Key攻击:原理、演进与实战检测

1. 项目概述:一次关于Windows认证核心的深度探索 最近在复盘一些内网渗透测试的案例时,我反复思考一个问题:当攻击者已经拿到了一台域内服务器的管理员权限后,他们下一步最想做什么?答案往往是持久化和横向移动。而在这…

作者头像 李华