我正在用C ++创建一个JVM - 每个JNI的程序,并且创建本身工作正常。与JVM的通信也很好;我能够找到类,创建对象,调用方法等。但是我的一个方法需要相当多的内存,并且JVM在调用它时会抛出一个OutOfMemoryError。我不明白,因为有超过一GB的可用内存。整个过程使用大约200MB,似乎它甚至没有尝试分配更多;它坚持200MB然后抛出异常。
我尝试将-Xmx-option传递给JVM,但是当通过JNI创建JVM时它不起作用。据我所知,通过JNI创建的JVM应该能够访问所有可用的内存,使得-Xmx-options不必要 - 但显然这个假设是错误的。
所以问题是,我怎么能说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 :(得分:0)
似乎我对-Xmx-option出了问题 - 再试一次,现在就可以了。