2012-08-31 6 views

답변

3

Java 필드에 할당되거나 JNI 함수 반환 값으로 사용되는 경우가 아니면 기본 호출이 반환되면 참조가 자동으로 가비지 수집됩니다. 로컬 참조입니다. JNI 호출 이후에 살지 않습니다.

+0

좋아, 그 작동합니다. 나는 그 localref가 다른 localref와 똑같다고 생각하지 않았다. ... duh –

0

동일한 주제 (jobjectArray 출시)를 찾아 보면서이 질문을 발견하고 @Seva에서 제공 한 답변이 완전하지 않은 것으로 나타났습니다.

당신 사용하여 다른 모든 LocalRef처럼 jobjectArray LocalRef을 삭제할 수 있습니다 물론

env->DeleteLocalRef(the_array); 
// OR 
(*env)->DeleteLocalRef(env, the_array); 

, 다른 LocalRef으로, 수동 삭제를 피할 수 있고, GC에 의존하는 한 마법을 할 같은 JNI 함수에서 많은 것을 필요로하거나, 예를 들어 새로운 JNI LocalRef을 할당하는 루프를 실행 중이고 삭제하지 않으면 나쁜 시간을 가질 수 있습니다. 테이블 제한 (꽤 낮은, 512로 설정)입니다.

참고 수동으로 배열 당신이 jobjectArrayDeleteLocalRef 기능은 자식 요소를 배출하지 않는 것을 기억해야 참조 삭제하려고하는 경우.

따라서 jobjectArray을 사용하는 경우 요소를 추적하거나 모든 요소를 ​​반복하고 하나씩 삭제해야합니다.

같은

원시적 배열을 이동하지만, 이러한 당신은이

env->Release<Primitive>ArrayElements(the_array, 
      the_elements_to_remove, 
      release_mode); 
// OR 
(*env)->Release<Primitive>ArrayElements(env, 
      the_array, 
      the_elements_to_remove, 
      release_mode); 
관련 문제