首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释Java原生通信性能

解释Java原生通信性能
EN

Stack Overflow用户
提问于 2010-02-14 11:43:56
回答 1查看 392关注 0票数 4

现在,我正在使用JNA进行Java本机通信,并对它的简单性感到满意。然而,我确实需要优化性能,并且正在考虑使用其他绑定。

我的问题是:Java本机通信的哪一部分是“昂贵”的部分?是它们之间的数据传递吗?

换句话说。现在,我的JNA接口正在调用的函数根本不会向Java传递任何数据,而且这些函数甚至不会被频繁调用。换句话说,Java调用库调用,然后库调用在一段时间内执行自己的操作,并返回一个原始类型。在这种情况下,JNI/Swig/等会比JNA更快吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-14 11:59:56

根据您的用例,JNI不会比JNA快。

Java与本机交互的代价在于传输大量内存。特别是,使Java内存对本机代码可用可能非常昂贵;IIRC这在一定程度上是因为Java可以选择以它喜欢的方式分割内存,但是本机代码将需要连续的内存块--内存的移动/复制需要一些时间。

如果您关心性能,那么应该确保您的JNA代码使用“直接”样式的访问,而不是原始的接口样式的访问。

此外,如果确实需要在Java和本机代码之间传输大量内存,则应该考虑使用单个初始直接分配(如果可能),并避免定期重新分配该内存。这样,您只需支付一次分配成本,并且在开始时,因此在大量调用时,成本变得可以忽略不计。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2260074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档