【问题标题】:JNI PerformanceJNI 性能
【发布时间】:2010-12-06 10:26:14
【问题描述】:

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

我对 JNI 或 C 的经验很少。

此外,我们的主要标准之一是性能。使用 JNI 对性能有多大影响?

【问题讨论】:

    标签: java-native-interface hdf5


    【解决方案1】:

    在我看来,由于您对 C 的经验很少,因此您最好的选择是从 Java 中开始。JNI 确实没有那么糟糕。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        我对C以外的HDF接口完全不熟悉,所以我无法和你比较。

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

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

        话虽如此,您确实需要根据 C 的对象模型来搞清楚:例如。指针、句柄等的使用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-20
          相关资源
          最近更新 更多