Как сборщик мусора работает со значениями Xmx и Xms - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть некоторые сомнения, как сборщик мусора JVM будет работать с различными значениями Xmx и Xms и размером памяти машины: как будет работать сборщик мусора в следующих сценариях:

1. Machine memory size = 7.5GB
   Xmx = 1024Mb
   Number of processes = 16
   Xms = 512Mb

Я знаю 16 * 512Mbуже превышает объем памяти машины.Как будет работать сборщик мусора в этом сценарии.Я думаю, что использование памяти будет целых 7,5 ГБ в этом случае.Смогут ли процессы что-нибудь сделать в этом?Или они все застрянут?

2. Machine memory size = 7.5GB
   Xmx = 320MB
   Xms is not defined.
   Number of Processes = 16

При этом 16 * 320Мб должно быть меньше 7,5 ГБ.Но в моем случае использование памяти снова достигает 7,5 ГБ.Является ли это возможным?Или у меня, вероятно, утечка памяти в моем приложении?

Итак, я хочу понять, когда работает сборщик мусора?Работает ли он всякий раз, когда память, используемая приложением, достигает точно значения Xmx?Или они вообще не связаны?

1 Ответ

0 голосов
/ 27 сентября 2018

Здесь нужно кое-что понять, а затем рассмотреть в вашей ситуации.

Каждый процесс JVM имеет свое собственное виртуальное адресное пространство, которое защищено операционной системой от других процессов.ОС отображает физические диапазоны адресов (называемых страницами) в виртуальное адресное пространство каждого процесса.Когда требуется больше физических страниц, чем доступно, страницы, которые не использовались в течение некоторого времени, будут записаны на диск (так называемый пейджинг) и затем могут быть использованы повторно.Когда данные этих сохраненных страниц требуются снова, они считываются обратно на ту же или другую физическую страницу.Делая это, вы можете легко запустить 16 или более JVM с кучей 1 ГБ на машине с 8 ГБ физической памяти.Проблема состоит в том, что чем больше требуется подкачки на диск, тем больше вы собираетесь снизить производительность ваших приложений, поскольку дисковый ввод-вывод на несколько порядков медленнее, чем доступ к ОЗУ.Это также является причиной того, что пространство кучи одной JVM не должно быть больше физической памяти.

Причина наличия опций -Xms и -Xmx заключается в том, что вы можете указать начальный и максимальный размер кучи.,Поскольку ваше приложение работает и требует больше места в куче, JVM может увеличить размер кучи в этих пределах.Часто эти значения устанавливаются одинаковыми, чтобы исключить накладные расходы, связанные с изменением размера кучи во время работы приложения.Большинство операционных систем выделяют физические страницы только тогда, когда они требуются, поэтому в вашей ситуации, если -Xms small, не изменит количество выполняемой подкачки.

Ключевым моментом здесь является то, что это система виртуальной памяти операционной системы.система, позволяющая создать впечатление, что она использует больше памяти, чем физически на вашем компьютере.

...