通过JNI / DLL或EXE执行本机代码?

时间:2009-10-12 18:20:36

标签: java c java-native-interface native

我们有一个本机应用程序,我们可以通过JNI-> DLL或通过命令行参数调用EXE来访问。哪种方法最好?

我们将每天调用此方法大约100次。表现并不是非常重要。这个原生应用程序是由我们公司以外的团队开发的,所以我们不太熟悉代码(尽管我们拥有它)。

EXE路线看起来更简单,更直接(特别是因为我们没有使用过很多C)。另外,如果您的DLL代码有内存泄漏或遇到其他一些麻烦,我会收集JNI,您可能会崩溃您的JVM。

2 个答案:

答案 0 :(得分:5)

我强烈推荐使用.exe方法。

  1. 如果崩溃,你可以重新生成.exe
  2. 您不会遭受内存泄漏/损坏等。
  3. 缺点是您可能必须解析.exe输出以确定结果/状态等,如果它不是为此设计的,那么这可能是不切实际的(甚至是不可能的)。

    但作为第一种方法,产生.exe是可行的方法。不要忘记consume the stdout/err concurrently以避免任何.exe挂起问题(一个常见问题,如果要相信SO问题)。

答案 1 :(得分:4)

对于这种情况,我会调用.exe,主要是因为在这种情况下不稳定的应用程序无法破坏JVM。

每天拨打.exe 100次就足够快了。

另一方面,如果.dll提供了一个好的API,那么使用它可能会让你有更好的机会诊断出问题。