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

技术手册>更多

  • 业务流程管理BPM(更新版)

    业务流程管理(business process management,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。

  • 云计算小指南(更新版)

    云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。

  • JBoss实用技术手册

    JBoss是一个同时运行Web及EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web操作系统(operating system for web),它体现了J2EE规范中最新的技术,无论是学习还是应用,JBoss为我们提供了一个非常优秀的平台。

  • 2010年SOA现状调查报告

    在2008-2009面临全球性的信贷危机时,SOA的应用依然屹立不倒。即便时下流行语已经被“云计算”所替代的情况下,SOA的运用也没有下降。TechTarget/Forrester Research所做的2010SOA现状调查表明……

TechTarget

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