Обработка аварии JNI - PullRequest
       28

Обработка аварии JNI

10 голосов
/ 23 декабря 2009

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

Ответы [ 2 ]

4 голосов
/ 23 декабря 2009

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

3 голосов
/ 23 декабря 2009

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

...