JNI 性能

问题描述 投票:0回答:3

我们的主程序是用java编写的,但从存储中提取数据的代码是用C编写的。我需要从提取的数据构建一个HDF5文件。使用 JNI 调用 C 代码获取数据然后从 Java 构建 HDF5 文件更好还是从 C 代码构建 HDF5 更好?

我对 JNI 或 C 缺乏经验。

我们的主要标准之一是性能。使用 JNI 时会对性能造成多大影响?

java jvm java-native-interface hdf5 ffi
3个回答
7
投票

函数调用边界“慢”,因此如果您对本机例程进行多次调用,那么性能将会受到影响。

可能从迁移到 JNI 中受益的一个例子(我强调可能,因为 Java 对于许多用途而言速度足够快)将是在大位图上进行某种图像处理的例程。但是为每个pixel调用 JNI 例程会比在纯 Java 中的循环中慢得多。

坦率地说,将数据从一种格式提取到另一种格式最好用Python这样的“脚本”语言来完成,并且永远不会受到CPU的束缚。相反,磁盘速度将比任何语言解释器慢得多。


2
投票

在我看来,既然你对 C 的经验很少,你最好的选择是使用 Java 来完成它。 JNI 确实没有那么糟糕。


0
投票

我对C接口以外的HDF接口一点也不熟悉,所以我无法真正为你进行比较。

我想指出的是,这是所有其他接口都使用的 API,因此,如果您发现需要寻求最大性能,那么 C API 将是最好的。

还有一个问题是 API 的哪些部分可供您使用。 例如,我最初是从 C++ 接口开始的。 某些 API 仍然只能在 C API 中使用。 当您使用 C 和 C++ 时,这不是问题,但如果您无法使用所需的 API,则可能会出现问题。

话虽如此,您确实需要充分了解 C 的对象模型:例如。使用指针、句柄等

© www.soinside.com 2019 - 2024. All rights reserved.