2011-03-25 15 views
1

我創建了一個JVM,每個JNI都使用C++程序,創建本身也能正常工作。與JVM的通信也很好;我能夠找到類,創建對象,調用方法等。但是我的一個方法需要相當多的內存,而JVM在調用它時拋出一個OutOfMemoryError。我不明白,因爲有超過一GB的可用RAM。整個過程使用大約200MB,它似乎甚至不嘗試分配更多;它堅持在200MB,然後拋出異常。每個JNI_CreateJavaVM創建一個JVM,接收一個OutOfMemoryError

我嘗試將-Xmx選項傳遞給JVM,但當通過JNI創建JVM時,它不起作用。據我瞭解,通過JNI創建的JVM應該能夠訪問所有可用的內存,使-Xmx選項不必要 - 但顯然這種假設是錯誤的。

所以問題是,我怎麼能說它只是應該使用盡可能多的內存,因爲它需要的JVM?

系統:MacOS的10.6 JVM的

創作:

JNIEnv *env; 
JavaVMInitArgs vm_args; 

JavaVMOption options; 
//Path to the java source code 
options.optionString = jvm_options; // setting the classpath 
vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6 
vm_args.nOptions = 1; 
vm_args.options = &options; 
vm_args.ignoreUnrecognized = 0; 

int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args); 
if(ret < 0) 
    printf("\nUnable to Launch JVM\n"); 

回答

0

好像我有毛病-Xmx選項 - 再次嘗試過了,現在的工作。

相關問題