2009-12-23 187 views
10

我有一個包含遺留C代碼的dll,我通過JNI調用了這個dll,但有時C代碼崩潰並導致JVM終止。有沒有辦法避免JVM崩潰?我可以處理JNI故障並讓JVM生存嗎? :)處理JNI崩潰

回答

3

如果是C代碼崩潰,那麼阻止它將JVM加入它的唯一方法就是防止C代碼崩潰。這是編寫JNI代碼時遇到的主要危險/問題之一,因爲與使用純Java編寫的東西相比,Java和C的組合更脆弱。

4

正如Timo所說,你沒有真正的選擇,只能使JNI代碼健壯。如果你不能這樣做(例如,如果你沒有源代碼),那麼也許你可以選擇一個進程間解決方案。將JNI代碼放在一個單獨的服務器進程中,跨RMI或HTTP調用。如果崩潰,請重新啓動「服務器」,但主JVM仍然存在。很明顯,性能開銷會增加,複雜性也會增加,但也許你可以負擔得起?