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

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

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

EXE路线似乎更容易,更直接(特别是因为我们没有使用很多C)。 另外,如果你的DLL代码有内存泄漏或遇到其他一些麻烦,我会收集JNI,你可以崩溃你的JVM。

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

  1. 如果崩溃,你可以重新生成.exe
  2. 你不会遭受内存泄漏/损坏等。

缺点是您可能必须解析.exe输出以确定结果/状态等,如果它不是为此设计的,那么这可能是不切实际的(甚至是不可能的)。

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

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

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

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