Java web-start max-heap-size приводит к невозможности запуска JVM - PullRequest
4 голосов
/ 20 июля 2010

Мы используем java webstart на стороне клиента для приложения, основанного на java swing.Недавно мы столкнулись со странной ошибкой «Не удается запустить виртуальную машину Java» при нажатии на ссылку jnlp.

Вскоре мы выясним это, поскольку для параметра max-heap-size в файле jnlp было установлено значение 1024 м, в то время как на большинстве клиентских ПК имеется только 1 ГБ физической памяти.Установите максимальный размер кучи обратно на 512 м. Решил проблему.В настоящее время соответствующая строка в файле jnlp выглядит так:

 <j2se version="1.5+" initial-heap-size="100m" max-heap-size="512m"/>

Я изучил спецификацию jnlp, но не могу найти ничего, связанного с проблемой «Виртуальная машина Java».В теории максимальный размер кучи не должен иметь значения так же, как начальный размер кучи.Но наш опыт подсказывает совершенно противоположное.

Клиентская среда:

Windows XP SP2 (32 бита), Internet Explorer 8.06, память 1G Примечание. Максимальный размер кучи, установленный на 1024 м, может вызвать то жепроблема на машине с 2G оперативной памяти.

По сути, я ищу здесь некоторые справки / спецификации / опыт о том, почему это происходит, и есть ли способ обойти эту проблему помимо увеличения размера физической памяти.

Другое дело, что если мы оставим максимальный размер кучи неуказанным, будет ли фактический размер физической памяти использоваться как максимальный размер кучи, или будет использоваться системный размер по умолчанию?

Спасибо, ДжейсонW

Ответы [ 2 ]

3 голосов
/ 22 августа 2010

Вероятно, эта проблема вызвана тем, что достаточно большая область памяти не может быть выделена для вашей JVM. Из соображений реализации куча объектов Java должна размещаться в смежных виртуальных адресах.

Я заметил, что на коробке с Win XP с 2 ГБ ОЗУ этот разрыв составляет около 1,5 ГБ (это, конечно, зависит от того, какие процессы запущены на каждом ПК, поэтому YMMV).

Изучите следующие посты для некоторых объяснений:

Максимальная память Java в Windows XP

Почему фиксированный максимальный размер кучи Java?

1 голос
/ 02 мая 2011

Я обнаружил, что как начальный размер кучи, так и максимальный размер кучи не очень уважались версией челюстей для Mac.В итоге я заменил их на что-то вроде этого:

      <j2se version="1.6+" java-vm-args="-Xmx1024m -Xms256m -Xss8m" />

И, наконец, он заработал на Mac с большим размером кучи

...