写点什么

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:373848
用户头像

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

关注

评论

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

嵌入式ARM设计编程(四) ARM启动过程控制

timerring

FPGA

华为游戏中心花瓣游戏开发者服务持续升级,赋能高效研运

最新动态

CleanMyMac2023电脑版免费下载教程

茶色酒

CleanMyMac X2023

户外交通信息led显示屏有以下特点才正规

Dylan

安装 LED显示屏 户外LED显示屏

架构实战营模块9作业

张建闯

架构实战营

渲染农场优势是什么_云渲染农场怎么用?

Renderbus瑞云渲染农场

云渲染 云渲染农场 Renderbus云渲染农场

【Unity 3D游戏开发】在Unity使用NoSQL数据库方法介绍

3DCAT实时渲染

Unity Unity3D 游戏开发引擎

房产|1月全国70城房价出炉!疫情放开后你关心的城市房价有何变化

前嗅大数据

大数据 数据分析 房产

今年很火的AI绘画怎么玩

得物技术

StudioOne6免费试用版下载及版本功能介绍

茶色酒

StudioOne6 StudioOne

嵌入式ARM设计编程(五) 实现信号的FIR滤波操作

timerring

arm

参加java培训学习怎么样

小谷哥

2023-02-17:sdl是跨平台的多媒体开发库,请问用go语言如何调用?

福大大架构师每日一题

golang 音视频 SDL 流媒体 福大大

「 Java基础-对象 」一篇文章讲清楚Java开发中如何更优雅的创建对象

小刘学编程

Java Builder 序列化 对象创建 new

Pandoc API 上手指南

面向工资Coding

chatGPT:探讨如何实现自动化测试场景

夏兮。

自动化测试 selenium ChatGPT

Migrate your data into databend with DataX

Databend

虚幻引擎UE4如何实现打包后播放片头?其实超简单!

3DCAT实时渲染

虚幻引擎 ue

接口调试时如何请求一个需要登录才能访问的接口

代码没有BUG

接口调试 API测试 apipost

一款好的低代码开发平台应该是什么样?

YonBuilder低代码开发平台

2023年中国直播电商发展洞察

易观分析

零售 直播 电商

追光进行时:沿着全光运力的新航道,加速驶向算力时代

脑极体

算力

6 理解业务概念和业务组件

涛哥 数字产品和业务架构

企业架构 业务架构

CorelDRAW Graphics Suite2023最新版本号

茶色酒

CorelDRAW 2022 CorelDraw2023

冰河指南AI技术社区基于ChatGPT正式启动运营

冰河

人工智能 程序员 AI 架构师 ChatGPT

Java高手速成 | Java web 实训之投票系统

TiAmo

Java Java web

Web前端开发最好用的几个WebGL框架

2D3D前端可视化开发

JavaScript 前端开发 WebGL webgl框架

IDC发布《2022中国大模型发展白皮书》,文心大模型能力全面领先

飞桨PaddlePaddle

大模型 文心

热点面试题: 常用位运算方法

沉浸式趣谈

JavaScript 前端面试题 #热点问题 前端javascript

关于工具软件:Apipost和Apifox哪个更好用看这篇就够了

代码没有BUG

Apifox 接口调试 API测试 apipost

Teradata退出中国背后:云数仓成为行业主流发展趋势

酷克数据HashData

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