加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

技能分享:详解Java外部成果接口

发布时间:2017-06-08 05:49:08 所属栏目:教程 来源:马德奎
导读:JDK加强提案(JEP)191界说了Java Foreign Function Interface(FFI),它是可以将当地函数绑定到Java要领以及打点当地内存块的接口。该提案会使得向JDK中添加当地级此外新特征更轻易,并且辅佐提供了一个用于Java开拓的尺度FFI。当前,Java Native Interface(JNI

  【 评述】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外部成果接口

更多出色接待存眷: CIO俱乐部民众微信

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读