2014-11-04 41 views
-1

在Java循環中創建JNI對象時,內存在Java進程中不斷增長。Jni對象在Java循環中增加內存

實施例:

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 2014-11-04 11:26:05

+0

你可以把更多的代碼?你如何在JNI調用中使用nat對象? – VAndrei 2014-11-04 11:49:33

回答

0

每個循環通創建一個新對象Nat這就需要存儲器。由於循環始終運行並且沒有中斷情況,因此內存增長非常快。

+0

你準確的測量結果是什麼? JVM確實避免了分析和其他技巧來減少內存使用量。這段代碼很可能會使用恆定數量的內存。 – rightfold 2014-11-04 11:29:15

+0

@rightføld - 實際上,這裏逃生分析不太可能有效。 1)它在很多JVM上都沒有默認啓用。 2)這是'main'方法,很有可能它不會很快得到JIT編譯。 JIT編譯器執行轉義分析... – 2014-11-04 12:02:03