2012-01-05 3 views
7

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

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

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

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

+0

Быстрый поиск приносит пользователям, которые удивлены тем, что JVM позволяет им устанавливать «-Xmx» на терабайты, даже если у них не так много места для подкачки. Не могли бы вы поделиться точными командами и версиями JVM, которые вы тестировали? – alf

+0

@alf, имейте в виду, что '-Xmx' устанавливает максимальный размер кучи, который представляет собой просто размер зарезервированного диапазона виртуального адресного пространства; только сумма, указанная в '-Xms', фактически поддерживается фиксированным хранилищем. Например, см. ['VirtualAlloc'] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887%28v=vs.85%29.aspx) и сравните' MEM_RESERVE' и 'MEM_COMMIT 'флаги. –

+0

@JeffreyHantin Я, Джеффри, знаю. Вот почему я спрашивал, что это такое. – alf

ответ

13

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

1

I came across this issue a while ago with Windows XP. Один из компьютеров XP, я мог выделить 1400 МБ, в то время как другие были только 1200 МБ. Консенсус был фрагментарным, как говорит Джеффри Хантин в другом ответе.

Смежные вопросы