2017-12-15 13 views
-1

Java Native Interface을 사용하여 JVM을 호출하는 프로그램이 있습니다. 프로그램은 서버입니다. 여러 요청을 처리하고 오랜 시간 동안 온라인 상태를 유지해야합니다.로컬 참조가`DetachCurrentThread`에 의해 지워지나요?

로컬 참조로 인한 메모리 누수를 방지하기 위해 각 요청을 처리하기 전에 PushLocalFrame을 호출하고 각 요청을 처리 한 후 PopLocalFrame을 호출하여 로컬 참조를 지울 수 있다는 것을 발견했습니다.

이제 여러 요청을 동시에 처리하고 싶습니다. 각 요청을 처리하기 전에 AttachCurrentThread에 전화를 걸고 각 요청을 처리 한 후에 DetachCurrentThread을 호출 할 수 있으며 각 요청마다 다른 JNIEnv을 사용합니다.

내 질문은 : 나는 또한 전에 각 요청을 처리 한 후 PushLocalFrame/PopLocalFrame 전화, 또는 이미 DetachCurrentThread 클리어 로컬 참조합니까? 이에 대한 문서를 찾을 수 없습니다.

답변

0

이 스레드가 분리 될 때 지역의 프레임을 팝 할 필요가 없습니다 :

을 당신은 AttachCurrentThread와 네이티브 스레드, 실행중인 코드를 첨부하면 것이다 결코 자동으로 무료 로컬 참조 스레드가

을 분리 될 때까지

출처 : "JNI Tips - Local and Global References" .