Почему установка слишком высокого значения -Xmx иногда приводит к сбою JVM, даже если имеется доступная оперативная память? - PullRequest
7 голосов
/ 06 января 2012

По сути, мы заметили, что на некоторых компьютерах установка параметра JVM -Xmx (максимальный размер кучи) иногда приводит к сбою инициализации JVM, даже если в системе более чем достаточно оперативной памяти.

Так, например, на 4-гигабайтной машине у нас есть -Xmx1024m, которая дает сбой, но -Xmx800m работает. Я мог понять на машине 1 ГБ, даже на машине 2 ГБ, но на машине 4 ГБ, особенно учитывая, что Windows, Linux и т. Д. Могут выгружать ОЗУ, почему это не получается?

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

Кроме того, как вы говорите, потреблять столько памяти, сколько вы хотите, до определенного размера тогда?

Ответы [ 2 ]

13 голосов
/ 06 января 2012

Возможно, это связано с фрагментацией виртуального адресного пространства . Может быть невозможным зарезервировать непрерывный 1024 МБ адресный диапазон для максимального потенциального размера кучи, в зависимости от адресов загрузки DLL, стекового расположения потоков, неподвижных выделенных областей памяти, зарезервированных адресов ядра и т. Д. вперед, особенно в 32-битном процессе.

1 голос
/ 06 января 2012

Я сталкивался с этой проблемой некоторое время назад с Windows XP . Одной из большинства машин XP я мог выделить 1400 МБ, в то время как другие были только 1200 МБ. Консенсус был раздроблен, как Джеффри Хантин говорит в другом ответе.

...