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");