JNI vs Runtime.exec()

时间:2009-04-23 17:46:05

标签: java java-native-interface

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

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

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

您是否考虑过JNA作为第三种选择?

来自JNA网站:

  

JNA为Java程序提供了轻松访问   到本机共享库(DLL上)   Windows)没有写任何东西,但   Java代码 - 没有JNI或本机代码   需要。这个功能是   与Windows的平台/调用相当   和Python的ctypes。访问是动态的   在运行时没有代码生成。

有关简介,请参阅他们的getting started指南。

答案 2 :(得分:0)

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

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