2009-12-23 7 views
10

J'ai une DLL qui contient du code C hérité, j'appelle cette DLL via JNI, mais parfois le code C se bloque et provoque la fin de la JVM. Est-ce qu'il y a un moyen d'éviter le crash JVM? Puis-je gérer la faille JNI et laisser la machine virtuelle survivre? :)Gérer un crash JNI

Répondre

3

Si c'est le code C qui plante, alors la seule façon de l'empêcher d'utiliser la JVM est d'empêcher le code C de se bloquer en premier lieu. C'est l'un des principaux dangers/problèmes que vous rencontrez lors de l'écriture de code JNI car cela rend la combinaison de Java et C un peu plus fragile par rapport à quelque chose qui est écrit en Java pur.

4

Comme l'a dit Timo, vous n'avez pas d'autre alternative que de rendre le code JNI robuste. Si vous ne pouvez pas le faire (par exemple si vous n'avez pas la source), alors vous pourriez peut-être opter pour une solution inter-processus. Placez le code JNI dans un processus de serveur distinct, effectuez des appels RMI ou HTTP. Si elle tombe en panne, redémarrez le "serveur" mais la JVM principale survit. De toute évidence, il y a une surcharge de performance et une augmentation de la complexité, mais peut-être que vous pouvez vous le permettre?