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就不会造成悲剧。

技术手册>更多

  • 2011年SOA精彩内容汇总

    时光飞逝,转瞬已经步入2012年,在十二月份,SesrchSOA.com.cn对于相关的一些领域做出了总结和展望,希望对于读者具有一定的指导意义。同时,编者也在这段时间内,对于过去一年中网站上的原创内容进行了一次全面的回顾,为大家总结了一些较为实用的技巧和分析,内容涉及SOA现状以及发展、SOA实操技巧、热门话题云计算以及Web服务。下面我们就来看看这些内容。

  • 应用生命周期管理(ALM)学习

    在当今世界,IT对于一个企业的重要性是毋庸置疑的,简单的用一句话可以概括——“应用就是业务”!IT的发展速度非常之快,我们不仅要问,究竟是什么原因会促使这种反战的继续?答案只有一个,业务驱动。这就对IT提出了一种挑战,快速地生产并交付出能够满足新的业务过程的需要的业务应用系统,这就涉及到了应用生命周期管理。

  • 简单对象访问协议SOAP学习手册

    SOAP是一种简单的基于XML的协议,它使应用程序通过HTTP来交换信息。在我们的SOAP学习手册中,你将了解到什么是SOAP,以及它如何在应用程序之间交换信息。

  • SOA之云开发技术手册

    十年前,面向服务架构突然出现在IT舞台上,而且许多公司已经在SOA应用上进行了大量的投资。现在云计算在IT舞台上更是独领风骚。SOA之于云,云之于SOA的意义又是怎样的。很明显,云计算的成功取决于它能够给现有的SOA实现增加价值的能力。而SOA的使用也促进了云开发。

TechTarget

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