处理 JNI 崩溃

Posted

技术标签:

【中文标题】处理 JNI 崩溃【英文标题】:Handle a JNI crash 【发布时间】:2010-12-29 11:10:21 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于处理 JNI 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

JNI/NDK开发指南——JNI异常处理

JNI/NDK开发指南——JNI异常处理

JNI异常处理和缓存策略

执行任何 IO/流时 C++ JNI 崩溃/挂起

OCR 应用程序崩溃并给出错误:jni_helper.cc:110 位图格式错误:4

Android jni/ndk编程五:jni异常处理