gpt4 book ai didi

java - 解释 Java 原生通信性能

转载 作者:搜寻专家 更新时间:2023-11-01 02:18:12 25 4
gpt4 key购买 nike

现在我正在使用 JNA 进行 Java 本地通信,并且对其简单性感到满意。但是,我确实需要优化性能,并且正在考虑使用其他绑定(bind)。

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

让我换一种说法。现在,我的 JNA 接口(interface)正在调用的函数根本不会将任何数据传递给 Java,而且这些函数甚至不会经常被调用。换句话说,Java 调用了一个库调用,然后库调用做它自己的事情一段时间并返回一个原始类型。在那种情况下,JNI/Swig/etc 会比 JNA 快吗?

最佳答案

鉴于您的用例,JNI 不会比 JNA 更快。

Java 原生交互的代价是传输大量内存。特别是,让 native 代码可以使用 Java 内存的成本可能非常高; IIRC 这在一定程度上是因为 Java 可以根据自己的喜好选择对内存进行分段,但 native 代码需要连续的内存块——内存的移动/复制需要一些时间。

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

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

关于java - 解释 Java 原生通信性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2260074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com