Создание JVM для JNI_CreateJavaVM, получение ошибки OutOfMemoryError - PullRequest
1 голос
/ 25 марта 2011

Я создаю JVM из C ++ - программы для каждого JNI, и само создание отлично работает. Связь с JVM также работает нормально; Я могу находить классы, создавать объекты, вызывать методы и так далее. Но одному из моих методов требуется довольно много памяти, и JVM выдает OutOfMemoryError при его вызове. Что я не понимаю, так как доступно более одного ГБ свободной оперативной памяти. Весь процесс использует около 200 МБ, и кажется, что он даже не пытается выделить больше; он достигает 200 МБ, а затем генерируются исключения.

Я пытался передать опцию -Xmx-JVM, но она не будет работать, когда JVM создается через JNI. Насколько я понял, JVM, созданная через JNI, должна иметь доступ к всей доступной памяти, что делает ненужными опции -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");

1 Ответ

0 голосов
/ 25 марта 2011

Похоже, я что-то не так понял с опцией -Xmx - попробовал еще раз и теперь работает.

...