2009-12-23 12 views
10

Mam dll, które zawiera starszego kodu C, ja nazywam tej dll przez JNI, ale czasami kod C ulega awarii i powoduje zakończenie JVM. Czy istnieje sposób na uniknięcie awarii JVM? Czy mogę obsłużyć błąd JNI i pozwolić JVM przetrwać? :)Obsługa awarii JNI

Odpowiedz

3

Jeśli to kod C, który się zawiesza, jedynym sposobem, aby uniemożliwić mu zabranie maszyny JVM, jest zapobieganie awariom kodu w pierwszej kolejności. Jest to jedno z głównych niebezpieczeństw/problemów, które pojawiają się przy pisaniu kodu JNI, ponieważ sprawia, że ​​kombinacja Javy i C jest nieco bardziej delikatna w porównaniu z czymś, co jest napisane w czystej Javie.

4

Jak powiedział Timo, nie ma żadnej realnej alternatywy, tylko aby kod JNI był solidny. Jeśli nie możesz tego zrobić (na przykład, jeśli nie masz źródła), być może możesz wybrać rozwiązanie międzyprocesowe. Umieść kod JNI w oddzielnym procesie serwera, wywołaj RMI lub HTTP. Jeśli ulegnie awarii, uruchom ponownie "serwer", ale główna JVM przetrwa. Oczywiście mamy narzut wydajności i wzrost złożoności, ale może stać cię na to?