Java 外部函数接口

日期:2014-3-28来源:infoQ

java   API   

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的基础。

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

评论
查看更多评论

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Java Web服务>更多

相关推荐

  • API项目中 官方客户端不再是可有可无的

    在API项目中,有官方支持的客户端才能给API社区传达积极的信息。没有官方支持客户的API就像是没有方向盘的汽车。可能是辆好车,但是却哪儿也去不了。

  • Google收购Apigee,焦点在于企业本身还是API?

    Axway的Suraj Kumar认为Apigee收购案不一定是件好事。尽管Google也许会像Borg一样行动,这也许预示着Google的态度需要转变。

  • Google的新收购是否意味着API变得更酷了?

    Google对API管理解决方案提供商Apigee的收购,我们应该怎么评价呢?是为了打造一个改变游戏的联盟吗?或者只是技术巨头想尽快吞食市场份额的尝试?

  • API版本化与迁移五大策略

    API版本化和迁移是不得不解决的问题,特别是在应用程序接口和不断变化的业务优先级绑定越来越紧密的当下。但是,如果采取一些关键步骤,改动API就不会造成悲剧。

技术手册>更多

  • 企业云ERP学习

    云之一词的出现带起一片“云海”,也改变了很多事情,改变传统的IT架构模式,冲击了传统的业务运作模式。那么企业内部资源规划,即ERP系统当然不能落于人后。

  • 大型机数据迁移和遗留SOA集成向导

    大型机应用现代化对于保持原有系统至关重要,而且大型机在大型企业高性能企业计算仍旧处于核心地位。这也是SOA成功案例中,目前正在进行的革新中最为显著的内容。以前,遗留大型机应用抵制重建,开发团队通过为意大利面式的代码排序,试图改写系统并非易事。遗留系统是一个已经运行了很长时间的,对机构来说是很重要的系统,但是往往不知道如何处理的大的软件系统。它与平台相关,但不能在网络环境中直接访问。另外,遗留系统不能直接访问存储在各种数据库管理系统中的数据,但由于遗留系统所完成的是关键业务,所以不能简单丢弃。在这本向导手册中我们将着重为您介绍遗留SOA集成问题以及大型机的数据迁移问题。

  • SOA与Web服务管理

    不管是服务的质量或是可靠性或是可获得性,所有这些能力服务都必须具有,他们必须以适当的方式工作。可能一个供应商提出了一个SOA管理技术,而且是如此地优于其他的技术以致于其实际上成为了事实上的标准。但是更可能的是相同的竞争压力驱使供应商试图合并,而唯一的SOA管理产品最终迫使市场在内部协作性上妥协,如果不能获得一个实际上的基于标准的方法。

  • Ajax:Web开发的未来

    Ajax全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),结合了Java技术、XML以及JavaScript等编程技术,是指一种创建交互式网页应用的网页开发技术。Ajax技术是目前在浏览器中通过JavaScript脚本可以使用的所有技术的集合。Ajax以一种崭新的方式来使用所有的这些技术,使得古老的B/S方式的Web开发焕发了新的活力。

TechTarget

最新资源
  • 安全
  • 存储
  • CIO
  • 数据库
  • 服务器
  • 云计算