У меня есть dll, который содержит наследие C код, я называю этот dll через JNI, но иногда код C разрушает и заставляет JVM завершаться. Это - там способ избежать катастрофического отказа JVM? Я могу обработать отказ JNI и позволить JVM выжить?:)
Как сказал Тимо, у вас нет другой реальной альтернативы, кроме как сделать код JNI устойчивым. Если вы не можете этого сделать (например, если у вас нет исходного кода), то, возможно, вы можете пойти на межпроцессное решение. Поместите код JNI в отдельный серверный процесс, выполните вызовы RMI или HTTP. Если произойдет сбой, перезапустите "сервер", но основной JVM выживет. Очевидно, что есть накладные расходы на производительность и увеличение сложности, но, может быть, вы можете себе это позволить?
.Если сбой происходит в C-коде, то единственный способ предотвратить сбой в JVM - это предотвратить сбой в C-коде в первую очередь. Это одна из главных опасностей/проблем, которые вы получаете при написании JNI кода, так как это делает комбинацию Java и C несколько более хрупкой по сравнению с тем, что написано на чистой Java.
.