Существует ли максимальное число, которое вы можете установить для Xmx при попытке увеличить память jvm? - PullRequest
44 голосов
/ 20 января 2009

Есть ли макс. размер вы можете установить Xmx? Я установил его на 1024 м и затмение открывается нормально. Когда я устанавливаю его выше 1024, eclipse не открывается, и я получаю сообщение об ошибке "jvm прекращено. Код выхода = -1" ...

Я делал это, потому что продолжаю получать «java.lang.OutOfMemoryError: пространство кучи Java». Я читаю в 35,5-мегабайтном файле .txt, и эта ошибка возникает, когда он просто читает файл, используя цикл "while((line = reader.readLine()) != null)". Я бы подумал, что 1024mb было бы достаточно. Кто-нибудь может мне помочь?

Ответы [ 4 ]

33 голосов
/ 20 января 2009

Да, есть максимум, но это зависит от системы. Попробуйте и посмотрите, удваивая, пока не достигнете предела, затем ищите вниз. По крайней мере, с Sun JRE 1.6 на Linux вы получите интересные, если не всегда информативные сообщения об ошибках (peregrino - это нетбук с 32-битной Ubuntu с 2G RAM и без подкачки):

peregrino:$ java -Xmx4096M -cp bin WheelPrimes 
Invalid maximum heap size: -Xmx4096M
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.

peregrino:$ java -Xmx4095M -cp bin WheelPrimes 
Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified

peregrino:$ java -Xmx4092M -cp bin WheelPrimes 
Error occurred during initialization of VM
The size of the object heap + VM data exceeds the maximum representable size

peregrino:$ java -Xmx4000M -cp bin WheelPrimes 
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

(experiment reducing from 4000M until)

peregrino:$ java -Xmx2686M -cp bin WheelPrimes 
(normal execution)

Большинство говорят сами за себя, за исключением -Xmx4095M, что довольно странно (может быть, сравнение со знаком / без знака?) И что оно претендует на резервирование 2686M на машине 2 ГБ без подкачки. Но это намекает на то, что максимальный размер составляет 4G, а не 2G для 32-битной виртуальной машины, если ОС позволяет вам адресовать столько.

5 голосов
/ 20 января 2009

Я думаю, что 32-битная JVM имеет максимум 2 ГБ памяти. Хотя это может быть устаревшим. Если я правильно понял, вы устанавливаете -Xmx на панели запуска Eclipse. Если вы хотите увеличить память для программы, которую вы запускаете из Eclipse, вы должны определить -Xmx в меню «Выполнить-> Выполнить конфигурации ...» (выберите ваш класс и откройте вкладку «Аргументы», поместите его в область аргументов виртуальной машины) , а НЕ при запуске Eclipse

Редактировать: детали, которые вы просили. в Eclipse 3.4

  1. Выполнить-> Выполнить конфигурации ...

  2. если ваш класс не указан в списке слева в поддереве «Java-приложения», нажмите «Новая конфигурация запуска» в верхнем левом углу

  3. справа, вкладка "Основные", убедитесь, что проект и класс правильные

  4. выберите вкладку «Аргументы» справа. у этого есть две текстовых области. один для аргументов программы, которые попадают в массив args [], предоставленный вашему методу main. другой для аргументов VM. поместите в один с аргументами VM (ниже iirc) следующее:
    -Xmx2048m

    Я думаю, что 1024 м должно быть более чем достаточно для того, что вам нужно!

  5. Нажмите Применить, затем нажмите Выполнить

  6. Должно работать:)

1 голос
/ 20 января 2010

Я думаю, что это около 2 ГБ. Хотя ответ Пита Киркхэма очень интересен и, вероятно, соответствует действительности, я выделил более 3 ГБ без ошибок, однако на практике он не использовал 3 ГБ. Это может объяснить, почему вы смогли выделить 2,5 ГБ на 2 ГБ ОЗУ без места подкачки. На практике он не использовал 2,5 ГБ.

1 голос
/ 20 января 2009

Посмотрите на this для некоторых распространенных ошибок в настройке кучи Java. Возможно, вы установили размер кучи больше, чем физическая память вашего компьютера.

Вам следует избегать решения этой проблемы за счет увеличения размера кучи. Вместо этого вам следует профилировать приложение, чтобы увидеть, где вы тратите такой большой объем памяти.

...