2014-11-04 2 views
-1

Java 루프에서 JNI 객체를 만들 때 메모리는 Java 프로세스에서 계속 증가합니다.Java 루프에서 Jni 객체 증가 메모리

예 :

class Nat{ 
    native void hello(); 
    public static void main(String[] args){ 
     while(true){ 
      //creating jni object 
      Nat nat = new Nat(); 
      // in this loop memory growing 
     } 
    } 

    static{ 
     System.loadLibrary('Hello') 
    } 
} 

JNIEXPORT void JNICALL Java_Nat_hello(JNIEnv *, jobject){ 
    //NOTHING CODE....................... 
} 
+0

아마도 질문으로 질문 할 수 있습니다. 너는 무엇을 알고 싶니? – boutta

+0

더 많은 코드를 넣을 수 있습니까? JNI 호출에서 nat 객체를 어떻게 사용합니까? – VAndrei

답변

0

모든 루프 패스 메모리를 필요로하는 새로운 Nat 객체를 생성한다. 루프가 항상 실행 중이며 중단 조건이 없으므로 메모리가 매우 빠르게 증가합니다.

+0

정확한 측정 결과는 무엇입니까? JVM은 메모리 사용을 줄이기 위해 분석 및 기타 트릭을 피합니다. 이 코드는 일정량의 메모리를 사용할 수 있습니다. – rightfold

+0

@ rightføld - 실제로 탈출 분석이 여기에서 효과적 일 것 같지 않습니다. 1) 많은 JVM에서는 기본적으로 활성화되지 않습니다. 2) 이것은'main' 메쏘드에 있습니다. JIT를 조만간 컴파일하지 않을 가능성이 있습니다. JIT 컴파일러는 이스케이프 분석을 수행합니다 ... –