Разница между аргументами -xms и -xmx для команды java

Я запускаю 6 java-процессов. Я установил для параметров -Xms и -Xmx значение 1 ГБ для каждого процесса. Таким образом, общее выделение кучи составляет 6 ГБ. У меня 8 ГБ физической памяти. Итак, после запуска этих 6 процессов команда «свободно» должна показывать 6 ГБ как использовано и 2 ГБ осталось, но это не так. Вместо этого «свободно» показывает, что используется только 1 ГБ и 7 ГБ свободно. Я немного смущен, поскольку мое понимание -Xms (A MB) заключается в том, что A MB памяти выделяется для JVM ОС, тогда как -Xmx (B MB) означает, что JVM может расширяться до B MB. В моем случае и A, и B одинаковы. Пожалуйста, помогите здесь.


person Vimal Jain    schedule 25.08.2013    source источник
comment
Физическая память довольно косвенно связана с виртуальной памятью. Пока в куче нет выделения, она не занимает физическую память (страницы памяти не фиксируются).   -  person Marko Topolnik    schedule 25.08.2013
comment
Это не совсем дубликат. В документах четко не указано, и я не собираюсь углубляться в исходный код JVM, но может случиться так, что JVM изначально не выделяет всю начальную кучу из ОС.   -  person chrylis -cautiouslyoptimistic-    schedule 25.08.2013
comment
@chrylis Процесс Java запрашивает память Xms для себя, но это вовсе не означает, что на самом деле занято столько физической памяти. Это все виртуальная память.   -  person Marko Topolnik    schedule 25.08.2013


Ответы (1)


Если вы используете Linux, это может быть связано с тем, что память физически не выделяется процессу до тех пор, пока процесс не начнет запись в память, даже если процесс выделил память.

person MTilsted    schedule 25.08.2013