3

我有两个选择——我可以使用 JNI 或使用 Runtime.exec 来执行 C++ 库。

C++ 程序是 CPU 密集型和长时间运行的,即某些调用可能需要几个小时才能返回。

各自的优缺点是什么?我应该采用哪种方法?

4

3 回答 3

5

如果您需要与 C++ 库交互,请选择 JNI。

如果它是您只想调用的独立程序(也许还想获取输出),那就Runtime.exec()简单多了。

于 2009-04-23T17:48:26.260 回答
2

您是否将JNA视为第三种选择?

从 JNA 网站:

JNA 使 Java 程序可以轻松访问本机共享库(Windows 上的 DLL),而无需编写 Java 代码以外的任何内容——不需要 JNI 或本机代码。此功能可与 Windows 的 Platform/Invoke 和 Python 的 ctypes 相媲美。访问在运行时是动态的,无需代码生成。

有关介绍,请参阅他们的入门指南。

于 2009-04-23T18:46:29.973 回答
0

使用 JNI 可能会限制您从 32 位迁移到 64 位的能力。您可能还会发现您还必须调整应用程序内存设置。

除非你知道 C++ 的东西写得有多好 - 它可能会使你的应用程序更加不稳定。您很幸运,因为 C++ 位需要几个小时 - 所以只需在外部调用它。

于 2009-04-23T22:04:52.413 回答