저는 JNI를 통해 레거시 애플리케이션의 다양한 고유 메소드를 호출하는 Java 애플리케이션을 보유하고 있습니다. 그러나 임의의 JNI 호출 외부의 임의의 위치에서 스택 덤프로 인해 JVM이 충돌합니다. 때로는 GC 동안, 때로는 클래스로드 및 기타 장소에서 충돌이 발생합니다. 하나 이상의 원시 메소드가 JVM 힙 또는 다른 데이터 구조를 손상시키는 것으로 의심됩니다. 이 호출이 무엇인지 알아야하므로 기본 구현을 수정할 수 있습니다.JNI 힙 손상 문제를 디버그하는 방법은 무엇입니까?
레거시 응용 프로그램은 원본이나 기호 정보가없는 타사 DLL입니다. Java에서 호출 가능하게 만들기 위해 JNI 호출 규칙을 사용하는 래퍼 DLL을 만들었습니다.
완벽한 솔루션은 JVM이 각 JNI 호출 후 힙 및 기타 데이터 구조의 무결성을 자동으로 검사하도록하는 확장 된 JVM 옵션입니다.
도움이 될만한 것을 알고 있습니까?
P. JVM과 레거시 애플리케이션 사이에 소켓이나 파이프 레이어를 빌드하라는 요구를하지 않기 때문에 요구하지 않습니다. 이것은 아키텍처 설계가 아니라 버그 탐지에 관한 것입니다.
'-Xcheck : jni'에 대해 알고 있다고 가정합니다. – Erik
네,하지만 물어봐 줘서 고마워. – fernacolo
이것이 도움이된다면 나는 다음과 같은 문제를 안고있다 :/나는 JNI를 통해 많은 양의 데이터를 가져 왔고 때로는 손상된 주소와 패킷 데이터를 얻는다. 그것은 전체 시뮬레이션을 망치고, 그것은 정말로 성가신 일입니다. –