Подтвердить что ты не робот

Обращение с JNI-сбоем

У меня есть dll, который содержит устаревший код C, я вызываю эту DLL через JNI, но иногда код C выходит из строя и приводит к завершению работы JVM. Есть ли способ избежать столкновения JVM? Могу ли я обработать ошибку JNI и позволить JVM выжить?:)

4b9b3361

Ответ 1

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

Ответ 2

Если это C-код, который сбой, то единственный способ предотвратить его использование JVM с ним - это предотвратить сбой кода C в первую очередь. Это одна из основных опасностей/проблем, возникающих при написании кода JNI, поскольку это делает комбинацию Java и C несколько более хрупкой по сравнению с тем, что написано на чистой Java.