时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

Java 外部函数接口

  • 2014-03-20
  • 本文字数:1184 字

    阅读完需:约 4 分钟

JDK 增强提案(JEP)191 定义了 Java Foreign Function Interface (FFI),它是可以将本地函数绑定到 Java 方法以及管理本地内存块的接口。该提案会使得向 JDK 中添加本地级别的新特性更容易,而且帮助提供了一个用于 Java 开发的标准 FFI。当前,Java Native Interface(JNI)是编写 Java 本地代码的标准编程接口。JNI 创建本地函数的方式并不简单,于是产生了像 Java Native Access (JNA)和 Java Native Runtime (JNR)这样的库。JNA 和 JNR 都是基于 JNI 创建的,而 JEP 191 可能会基于 JNR。

JEP 191 在 Java 级别提供了类似于 JNA 或 JNR 的外部函数接口。开发人员可以通过它轻松地访问本地函数,以及在 JVM 级别管理本地内存。它还将支持未来针对标准 Java FFI 的 JSR。Java FFI API 可用于实现本地支持的功能,像 NIO、高级文件系统元数据、进程管理。使用 FFI API 而不是 JNI 绑定本地代码和内存将成为开发人员更喜欢的方式。JEP 191 并不包含对 JNI 的增强,不过这些可能会加入到 JSR 进程中。

目前,JNI 是编写 Java 本地方法以及将 Java 虚拟机嵌入本地应用程序的标准编程接口。它管理着 JVM 和非托管的本地环境之间的边界,提供数据编组和对象生命周期管理协议。根据 JEP 191,JNI 在下列几个方面最令开发人员痛苦:

  • 需要开发人员编写 C 代码,这意味着他们需要具备一个完全不同于 Java 的世界的专业知识。
  • 由于开发人员必须对 JVM 如何管理内存和代码多少有一些了解,所以典型的 C 和 Java 开发人员通常并不具备使用 JNI 所需的专业知识。
  • 开发人员必须能够为他们想要支持的每个平台构建代码,或者为终端用户提供适当的工具,由他们来完成这项工作。
  • 相比于相同的库绑定到本地应用程序,基于 JNI 的库性能通常较差。
  • JNI 充当了一个不透明的安全边界。JDK 并不知道库中的函数可能会调用什么,或者库中的代码是否会损害 JVM 的稳定或安全。

JNI 的问题可以通过在 JDK 中内建 FFI API 来解决。Java FFI 将更容易实现,而且不需要太多关于 JVM 内部原理和各种宿主平台的专业知识。FFI API 将提供下列特性:

  • 一个描述本地库调用和本地内存结构的元数据系统。
  • 发现和加载本地库的机制。
  • 基于元数据将库 / 函数或内存结构绑定到 Java 端点的机制。
  • 用于 Java 数据类型和本地数据类型之间编组和解组的代码。

JEP 191 还可能增加本地调用的 JIT 优化、GC 层可知的本地内存和选择取消已知不必要的 JNI 安全保护的机制。它还会包含基于 JRuby ffi-gen 库的工具,用于从本地库收集函数和内存的元数据。开发人员还可以设置安全策略,允许绑定到特定函数,而不是库级别的权限。

对 Java FFI 的需求已经产生了 JNA 和 JNR 库。JNA 库应用更广泛。JNR 库更全面,因为它实现了不同层次的抽象,提供了函数和内存元数据,对库和函数绑定进行了抽象。JNR 已经在 JRuby 项目中大量使用,它可能会成为 JEP 191 的基础。

查看英文原文:**** Java Foreign Function Interface

2014-03-20 22:374047
用户头像

发布了 256 篇内容, 共 98.6 次阅读, 收获喜欢 12 次。

关注

评论

发布
暂无评论
发现更多内容

YashanDB TO_NUMBER函数

YashanDB

MyEMS:以开源创新构建企业能源管理的自主可控生态

开源能源管理系统

开源 能源管理系统

顶级BlueHat奖参赛作品的技术分析:ROP防御技术深度剖析

qife122

网络安全 ROP攻击

黑龙江三级等保:关键信息基础设施的核心防线

等保测评

YashanDB TRANSLATE函数

YashanDB

YashanDB TO_YMINTERVAL函数

YashanDB

一文读懂海外舆情监测系统的功能全景图

沃观Wovision

沃观Wovision 舆情监测系统 海外舆情监测

京东流量资产基于湖仓架构的落地实践

京东零售技术

阿里云Serverless计算产品入选Gartner®报告「领导者」象限!

阿里巴巴云原生

阿里云 Serverless 云原生

从数据感知到决策优化:MyEMS 开源能源管理系统的技术架构与实践效能解析

开源能源管理系统

开源 能源管理系统

区块链 Web3 项目的外包开发费用

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

霍姆赛福:以科技守护中式厨房安全,让安心常伴生活

极客天地

区块链 Web3 项目的外包开发

北京木奇移动技术有限公司

软件外包公司 web3外包 区块链外包

阿里云Elasticsearch Serverless节省计划来啦!预付抵扣包享最高7折优惠!

阿里云大数据AI技术

人工智能 云计算 大数据 elasticsearch Serverless

AI Compass前沿速览:Claude Opus 4.1、MiniMax-Speech 2.5、Qwen-Flash、Jules – 谷歌AI编程智能体

汀丶人工智能

YashanDB TO_TIMESTAMP函数

YashanDB

Taro on HarmonyOS 技术架构深度解析

京东零售技术

以太坊合约可复用属性指南 - 提升智能合约安全的模糊测试技术

qife122

区块链 智能合约

自动化推理技术入门指南

qife122

自动化推理 程序分析

区块链U卡APP的主要功能

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

YashanDB TO_DSINTERVAL函数

YashanDB

2013年10月安全更新:IE、Windows内核驱动及.NET框架关键漏洞修复

qife122

安全更新 Internet Explorer .NET框架

Alexa通过机器学习预测用户潜在需求

qife122

机器学习 上下文理解

自注意力机制的量子物理解析:GPT-2 Transformer哈密顿量分析

qife122

自然语言处理 注意力机制

大数据-63 Kafka 副本机制详解:高可用性、ISR原理与Leader选举全解析

武子康

Java 大数据 kafka 分布式 消息队列

等保测评与网络安全人才:培育龙江安全守护者

等保测评

AI时代产设研协同实践!如何用Pixso 2.0缩短迭代周期30%

职场工具箱

设计 产品经理 产品设计 UI 在线协作

AI 智能体记忆机制详解

Baihai IDP

程序员 AI LLM AI Agent AI 智能体

MyEMS:以开源创新构建企业能源管理的自主可控生态

开源能源管理系统

开源 能源管理系统

数智津门:伙伴+华为赋能下的新质生产力全球样本

脑极体

AI

new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析

poemyang

编译原理 逃逸分析 Java虚拟机 即时编译器 #java

Java 外部函数接口_Java_Bienvenido David_InfoQ精选文章