JNI vs Runtime.exec()

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

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

各自的优点和缺点是什么? 我应该选择哪种方法?

如果您需要与C ++库交互,请转到JNI。

如果它是一个你想要调用的独立程序(也许可以获取输出), Runtime.exec()会简单得多。

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

来自JNA网站:

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

请参阅他们的入门指南以获取介绍。

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

除非你知道C ++的东西写得多好,否则它会让你的应用更加不稳定。 你很幸运,因为C ++位需要几个小时 – 所以只需在外部调用它。