2015-03-23 2 views
0

Я только что начал R & D на размер кучи JVM и заметил странное поведение.Проблемы с размером кучи JVM

  • Мой размер системы оперативной памяти 4 GB
  • ОС 64-разрядные окна 7
  • Java версия 1,7

Вот наблюдения:

я написал образец магистрального программа, которая начинается & сразу же отправилась в wait состояние.

При запуске программы из затмения с -Xms1024m -Xmx1024m параметров он может иметь возможность запускать 3 раза/параллельно-процесс от 3 затмение т.е. параллельный процесс только как мой ОЗУ только 4 Гб. Это ожидаемое поведение.

Поэтому я перезапускать то же самое с -Xms512m -Xmx512m параметров и может иметь возможность запускать 19 раз/параллельно-процесс от затмения, даже моя оперативная память 4 Гб. КАК?

Я использовал VisualVM инструмента для перекрестной проверки и я могу видеть 19 идентификаторахов процессов и каждый идентификатор процесса выделяется с размером 512m даже мой RAM 4 Гб, но КАК?

Я просмотрел его & прошел через документацию о oracle по управлению памятью & оптимизация, но эти статьи не ответили на мой вопрос.

Заранее спасибо.

Спасибо, Баджи

+0

Goggle сказал мне, что компьютер может обмениваться оперативной памятью, чтобы фактически создать больше оперативной памяти, освободив биты, которые он не использует * прямо затем *. – Warkst

+0

Если это так, в вышеупомянутом случае должно быть последовательным, но поведение отличается. –

+0

Вы уверены, что все процессы были запущены параллельно? – Ivan

ответ

0

Интересно, почему вы не могли бы начать более 3 процессов с -Xmx1024M -Xms1024M. Я протестировал его на своей 4 ГБ Linux-системе, и я мог бы запустить как минимум 6 таких процессов; Я больше не пытался начинать.

В любом случае, это связано с тем, что программа фактически не использует эту память, если вы только начинаете ее с -Xmx1024M -Xms1024M. Они просто определяют максимальный размер кучи. Если вы не выделяете этот объем данных, эта память фактически не будет использоваться.

«top» показывает, что размер виртуального набора составляет более 1024 М для таких процессов, но на самом деле он не использует эту память. Он просто выделил адресное пространство, но никогда не использовал его.

+0

Эй! Juhist, Спасибо за быстрое обновление. Итак, значит, вы можете запустить даже 100 процессов с -Xmx1024M -Xms1024M? когда ваша программа фактически не использует данные/память. –

+0

Да, вы сможете запустить даже 100 процессов. Или я не уверен в этом, зависит от того, сколько памяти использует JVM для процессов, которые не требуют дополнительной памяти. Но вы должны, по крайней мере, начать хотя бы десятки процессов даже с -Xmx1024M -Xms1024M в вашей среде 4 ГБ. – juhist

+0

Хорошо, спасибо. Но все же я могу запустить 3 процесса только с -Xmx1024M -Xms1024M в вашей среде 4G Windows 7. –

0

Фактическая память на вашем ПК и выделенная память не должны совпадать. Фактически, ваша операционная система перемещает данные из ОЗУ ontothe hdd, когда ваш барабан заполнен. Это называется подкачки/пейджинг. Вот почему окна имеют swap-файл на hdd, а unix имеет раздел подкачки.

+0

Эй! Спасибо за вклад. Если да, то почему в случае -Xms1024m -Xmx1024m не разрешено запускать более 3-х раз/процесс? в то время как он позволяет 19 процесс с -Xms512m -Xmx512m, даже у меня есть 4 ГБ ОЗУ? –

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