我有一个包含遗留C代码的DLL,我通过JNI调用此DLL,但有时C代码崩溃并导致JVM终止。有没有办法避免JVM崩溃?我可以处理JNI故障并让JVM存活下来吗? :)
答案 0 :(得分:4)
正如Timo所说,你没有其他选择,只能让JNI代码变得健壮。如果您不能这样做(例如,如果您没有源代码)那么也许您可以选择进程间解决方案。将JNI代码放在单独的服务器进程中,进行RMI或HTTP调用。如果崩溃,重新启动“服务器”,但主JVM仍然存在。显然存在性能开销,并且复杂性增加,但也许你可以承受这个?
答案 1 :(得分:3)
如果它是崩溃的C代码,那么阻止它使用JVM的唯一方法是防止C代码首先崩溃。这是编写JNI代码时遇到的主要危险/问题之一,因为与使用纯Java编写的东西相比,它使Java和C的组合更加脆弱。