2009-12-23 2 views
10

레거시 C 코드가 들어있는 DLL이 있습니다.이 DLL은 JNI를 통해 호출되지만 때로는 C 코드가 충돌하고 JVM이 종료됩니다. JVM 충돌을 피할 수있는 방법이 있습니까? JNI 오류를 처리하고 JVM을 생존시킬 수 있습니까? :)JNI 충돌 처리

답변

3

충돌하는 C 코드의 경우, JVM을 사용하지 못하게하는 유일한 방법은 C 코드가 처음부터 충돌하는 것을 방지하는 것입니다. 그것은 JNI 코드를 작성할 때 Java와 C의 결합이 순수 Java로 작성된 것과 비교하여 다소 취약하기 때문에 얻을 수있는 주요 위험/문제점 중 하나입니다.

4

Timo가 말했듯이, JNI 코드를 강력하게 만들 수는 없습니다. 그렇게 할 수 없다면 (예를 들어 소스가없는 경우) 프로세스 간 솔루션을 사용할 수 있습니다. JNI 코드를 별도의 서버 프로세스에 넣고 RMI 또는 HTTP 호출을 수행합니다. 충돌이 발생하면 "서버"를 다시 시작하지만 주 JVM은 남아 있습니다. 분명히 성능 오버 헤드가 있고 복잡성이 증가하지만 어쨌든 이것을 감당할 수 있습니까?