C++ JNI에서 GetStringUTFChars 사용에 대한 질문입니다.
자바로 작성된 프로그램 운영 도중 예기치 않게 System이 hang-up 되는 현상이 있어서 문제점을 찾던 도중 JNI로 구현한 코드에 대해 궁금한 점이 있어서 질문 드립니다.
C Version
(*env)->GetStringUTFChars(env, name, iscopy)
C++ Version
env->GetStringUTFChars(name, iscopy)
1. C++에서 다음과 같이
str = (char *)env->GetStringUTFChars( name , NULL ) ;
함수를 호출하고 ReleaseStringUTFChars()함수를 사용해서 자원을 해지하지 않은 경우가 있습니다. 명시적으로 자바가상머신에게 자원을 해제하라고 알려주는 함수로 알고 있는데요
이렇게 Release하지 않은 경우가 한두개 있고 실행중 이 함수가 call 되는 부분이 한두번 밖에 없다고 할 때 이 문제로 인해 메모리 릭이 아니라 system hang이 걸려버릴수도 있는건가요?
제 생각엔 memory alloc과 free처럼 잡은 자원을 돌려주지 못해서 불필요한 메모리를 잡고는 있겠지만 이로 인해 hang이 되버리진 않을거 같은데요...
참고로 system hang이 되는 증상이 특이합니다.
Solaris 5,8 환경인데 다른 명령어들은 (예를 들면 ls) 잘 동작하는데 ps 명령어만 치면 터미널에서 아무런 응답이 없습니다.
혹시나 해서 /proc 로 들어가서 ls를 치면 역시 아무런 응답이 없구요 이러한 현상이 벌어지면 init 0 명령어도 동작하지 않게됩니다
Re: C++ JNI에서 GetStringUTFChars 사용에 대한 질문입니다.
이문제는 해결 되셨나요?
저도 이런 비슷한 경험이 있는데
첫째는 H/W 이상이 의심되더군요.
그리고 저 같은 경우에는 공유 메모리 쪽에서 문제가 생겨서 그랬었는데...
경우에 따라 다르니.....
도움이 되시길...
일하는 사람들의 희망 민주노동당 : http://www.kdlp.org
반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.
T_T 아직도 해결 못했습니다...
쌀밥님 관심 보여주셔서 감사드립니다.
JNI질문은 상기 증상을 해결해 보고자 이것저것 가능성이 있는것들을 찾아보다보니 JNI사용시 멀티쓰레드 환경에서 글로벌 변수나 공유메모리 사용시 예기치 않은 JVM hang을 초래할 수 있다...라는 글을 보고 혹시나 하고 들여다 보고 질문드린것입니다.
같은 OS(Solaris 8)에 같은 Java 버전 하에서 특정 프로그램을 실행할때 저런 hang 현상이 발생하곤 합니다. 그래서 그 프로그램이 범인이라고 의심하고 있습니다...
또한 제가 경험한바로는 Ultra60과 Enterprise2000(다른 시스템에서 2번)에서 현상이 발생했는데요. 특정한 시스템에서만 발생했다면 하드웨어 이상을 의심해봤겠는데 이런 경우라면 일단 하드웨어 이상은 배제하고 소프트웨어쪽을 봐야 하지 않나요?
도대체 프로그램이 어떤짓을 하면 조용히 /proc를 깨먹을수 있는걸까요?
쌀밥님 경험하셨던 공유메모리쪽 문제좀 간단하게라도 설명 부탁드리면 안될까요?
댓글 달기