Не удалось зарезервировать достаточно места для кучи объектов для запуска JVM

Просто столкнулся с странной проблемой. Когда я печатаю

java -version

я получил

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

.

java -Xms64m -Xmx64m -version

Эта команда отлично работает

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode)

Если я меняю xms, xmx на 128m, я снова получаю ошибку.

Используя команду top и free -m, я вижу, что я получил более 192 МБ бесплатно, поэтому почему я все еще получаю эту ошибку?

Mem:    262144k total,    64760k used,   197384k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

Спасибо

Ответ 1

Похоже, что машина, на которой вы пытаетесь запустить это, имеет только 256 МБ памяти.

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

Попробуйте запустить Java-программу с меньшим размером кучи, например:

java -Xms16m ...

Ответ 2

У меня была такая же проблема при использовании 32-разрядной версии java в 64-битной среде. При использовании 64 java в 64 ОС это было нормально.

Ответ 3

В соответствии с этот пост это сообщение об ошибке означает:

Размер кучи больше, чем физическая память вашего компьютера.

Изменить: Куча - это не единственная память, которая зарезервирована, я полагаю. По крайней мере, есть другие настройки JVM, такие как PermGenSpace, которые запрашивают память. С размером кучи 128M и PermGenSpace 64M вы уже заполняете доступное пространство.

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