2009-12-23 207 views
10

我有一个包含遗留C代码的dll,我通过JNI调用了这个dll,但有时C代码崩溃并导致JVM终止。有没有办法避免JVM崩溃?我可以处理JNI故障并让JVM生存吗? :)处理JNI崩溃

回答

3

如果是C代码崩溃,那么阻止它将JVM加入它的唯一方法就是防止C代码崩溃。这是编写JNI代码时遇到的主要危险/问题之一,因为与使用纯Java编写的东西相比,Java和C的组合更脆弱。

4

正如Timo所说,你没有真正的选择,只能使JNI代码健壮。如果你不能这样做(例如,如果你没有源代码),那么也许你可以选择一个进程间解决方案。将JNI代码放在一个单独的服务器进程中,跨RMI或HTTP调用。如果崩溃,请重新启动“服务器”,但主JVM仍然存在。很明显,性能开销会增加,复杂性也会增加,但也许你可以负担得起?