2009-12-23 13 views
10

Ho una DLL che contiene codice C legacy, chiamo questa dll tramite JNI, ma a volte il codice C si blocca e causa la terminazione della JVM. C'è un modo per evitare l'arresto di JVM? Posso gestire l'errore JNI e lasciare che la JVM sopravviva? :)Gestione di un arresto JNI

risposta

3

Se si tratta del codice C in arresto anomalo, l'unico modo per impedirgli di utilizzare JVM è impedire il primo arresto del codice C. Questo è uno dei principali pericoli/problemi che si incontrano quando si scrive codice JNI poiché rende la combinazione di Java e C un po 'più fragile rispetto a qualcosa che è scritto in puro Java.

4

Come ha detto Timo, non hai una vera alternativa se non quella di rendere robusto il codice JNI. Se non puoi farlo (per esempio se non hai il sorgente), forse potresti optare per una soluzione inter-processo. Inserire il codice JNI in un processo server separato, effettuare chiamate RMI o HTTP. Se si blocca, riavvia il "server" ma la JVM principale sopravvive. Ovviamente c'è un sovraccarico delle prestazioni e un aumento della complessità, ma forse puoi permetterti questo?