Как указывалось в других ответах, вы используете переключатель -Xmx
, чтобы выделить больше оперативной памяти для JVM.
Однако есть предел того, насколько высоко вы можете подняться.В 32-битной системе это, вероятно, будет 2 ГБ, может быть 3 или 4 ГБ, если JVM его поддерживает.Для Sun JVM ограничение составляет 1500 МБ в 32-битной Windows, в соответствии с Java -Xmx, Макс. Память в системе .
По фундаментальным архитектурным причинам процесс не может (без специальных методов) получитьболее 4 ГБ памяти (, включая любое пространство подкачки, которое он может использовать), поэтому существует ограничение на значения -Xmx
.
Если вы пробовали максимально возможное значение, и до сих порполучить ошибки OOM, тогда единственные варианты:
- исправить приложение так, чтобы ему требовалось меньше оперативной памяти
или
- переместить его в64-битная ОС и увеличение
-Xmx
еще больше
Редактировать:
Обратите внимание, что ограничение в 4 ГиБ является ограничением архитектуры процессора , так что это относится к любому процессу, Java или нет.Так что даже нативные приемы размещения вам здесь не помогут.Единственный способ обойти это - использовать более одного процесса, но это потребует фундаментальной переписки приложения, что, вероятно, будет столь же сложным, как и просто установка приложения на использование меньшего количества оперативной памяти.Таким образом, два указанных выше варианта являются вашими единственными (разумными) вариантами.
Редактировать 2:
Чтобы ответить на новую часть вашего вопроса:
Мне было интересно, можно ли заставить JVM работать как собственные процессы.
Это недоразумение.JVM работает как собственный процесс в этом отношении: куча, которую она использует, находится в памяти, выделенной из ОС JVM;для ОС это просто выделенная память, и ОС будет заменять ее, как и любую другую память, если захочет - в этом нет ничего особенного.
Причина, по которой куча не может расти бесконечно, не в том, чтоона не может быть больше физической ОЗУ (возможно, я пробовал это по крайней мере в Linux / x86), но каждый процесс ОС (то есть, JVM) не может получить больше 4 ГБ ОЗУ.Таким образом, в 32-битных системах никогда не может быть больше, чем 4 ГБ кучи.На практике это может быть намного меньше, потому что память кучи не должна быть фрагментирована (см., Например, Максимальная память Java в Windows XP ), но 4 ГБ - это жесткий, неизбежный предел.