本文讨论了外部函数与内存(FFM)API,介绍了其读取和写入字符串到内存段的方法,以及如何从现有Java字符串分配内存段。文章还探讨了增强FFM API以提高字符串与内存段之间互操作性的方式。
Java平台通过外部函数与内存访问API(FFM API)简化了与本地库的交互,提供了内存段模型和描述本地函数的API,并通过jextract工具自动生成访问代码,提升了安全性和易用性。
FFM API在Java 22中最终确定,提供安全的本地内存和函数访问。与Unsafe相比,FFM API通过MemorySegment类实现边界、活性和对齐检查,确保安全性。尽管单次访问性能较低,但在循环中多次访问时性能差距缩小。优化访问模式和使用reinterpret方法可进一步提升性能。总体而言,FFM在安全性与性能之间取得平衡。
Per-Åke Minborg在JavaOne 2025上介绍了JEP 454,外部函数和内存API,旨在替代JNI,解决维护成本高和效率低的问题。FFM API提供安全高效的本地内存访问,支持结构化访问和直接调用本地函数,简化开发流程。
Java平台通过逐步限制不安全API的使用,提升了稳定性和安全性。JDK 22引入的FFM API简化了外部代码调用并确保内存访问安全。JDK 21和24的改进进一步限制了动态加载代理和JNI的使用,强调代码和数据的完整性,推动Java生态系统向更可靠的方向发展。
本文介绍了外部函数和内存(FFM)API的教程,帮助理解如何在Java虚拟机外调用代码并安全访问非JVM管理的内存。FFM API使Java应用能够调用本地库并处理本地数据,避免了JNI的脆弱性和风险。
该视频介绍了两个Java改进项目:StableValues和SegmentMapper。StableValues为@Stable注解提供安全封装,使普通开发者能够利用其性能和灵活性。SegmentMapper解决了FFM API对结构化内存的限制,允许将其映射到标准Java复合类型,从而提升了FFM API的多功能性。
Java 21 是一次重大更新,Java 22 和 23 也带来了重要改进,包括未命名模式、字符串模板移除、JavaDoc 中的 Markdown 模块导入等。FFM API、语言、API 和虚拟机都有提升。这些变化在 Javazone 2024 上讨论。
Java 21引入了多个新功能,包括Foreign Function & Memory API (FFM API),允许Java与本地代码交互。FFM API由Foreign Function Interface (FFI)和Memory API组成。以前使用JNI调用外部函数,但FFM API简化了这个过程。FFM API还提供了一种更安全、更高效的管理非堆内存的方式。Java 21还引入了未命名模式和变量,提高了代码的可读性和可维护性。Java 21的另一个亮点是虚拟线程,允许轻量级并发和更高的吞吐量。作用域值是一个新概念,提供了一种在程序的不同部分之间共享数据而不需要显式参数传递的方式。这些功能旨在简化Java编程并提高性能。
JEP 472提议限制将来的Java版本中JNI和FFM API的使用,以增强安全性和性能。该提议包括对JNI使用发出警告和调整FFM API。目标是要求开发人员对任何JNI和FFM API的使用进行明确批准。文章解释了JNI使用的风险,如内存损坏和绕过访问检查。提议建议采取分阶段的方法限制JNI的使用,并提供了启用本地访问的选项。文章还提到了一个新工具,jnativescan,用于帮助识别使用JNI的库。过渡到更严格的JNI限制可能需要进行调整,但将有助于构建更安全的Java生态系统。
完成下面两步后,将自动完成登录并继续当前操作。