Каковы преимущества указания предела памяти виртуальной машины Java? - PullRequest
8 голосов
/ 14 сентября 2011

Я установил предел памяти по умолчанию для виртуальной машины Java при запуске приложения Java, как это ...

java -mx128m ClassName

Я знаю, что это установит максимальный пул выделения памяти на 128 МБ, но я не знаю, каково преимущество указания этого ограничения памяти для JVM?

Пожалуйста, просветите меня в этом вопросе ...

Ответы [ 5 ]

8 голосов
/ 14 сентября 2011

В Sun JVM 1.6 на компьютере серверного класса (то есть на компьютере с 2 ЦП и не менее 2 ГБ физической памяти ) максимальный размер кучи по умолчанию равен , меньшему 1/4 физическая память или 1 ГБ . Использование -Xmx позволяет изменить это.

Почему вы хотите ограничить объем памяти, используемой Java? Две причины.

Во-первых, автоматическое управление памятью в Java имеет тенденцию захватывать как можно больше памяти из операционной системы, а затем управлять ею в интересах программы. Если вы выполняете другие программы на том же компьютере, что и ваша Java-программа, то она будет захватывать больше своей доли памяти, оказывая на них давление. Если вы запускаете несколько копий своей Java-программы, они будут конкурировать друг с другом, и в некоторых случаях вам может не хватить памяти. Ограничение размера кучи позволяет вам управлять этим: если у вас 32 ГБ ОЗУ и четыре процесса, вы можете ограничить каждую кучу примерно до 8 ГБ (чуть меньше - лучше) и быть уверенным, что все они будут полезны. получить нужное количество памяти.

Во-вторых (действительно, еще один аспект первого), если процесс захватывает больше памяти, чем операционная система может предоставить из физической памяти, он использует виртуальную память, которая выгружается на диск. Это очень медленно. Java может уменьшить использование памяти, заставляя сборщик мусора работать тяжелее. Это также медленно - но не так медленно, как переход на диск. Таким образом, вы можете ограничить размер кучи, чтобы избежать подкачки Java-процесса и, таким образом, повысить производительность.

4 голосов
/ 14 сентября 2011

Для JVM будет задан предел размера кучи по умолчанию. Этот параметр позволяет переопределить его, обычно так, чтобы вы могли указать, что вы хотите, чтобы больше памяти было выделено для процесса Java.

3 голосов
/ 14 сентября 2011
  1. Устанавливает максимальный размер кучи. Общая виртуальная машина может быть больше
  2. Всегда существует ограничение, поскольку этот параметр имеет значение по умолчанию (по крайней мере, для виртуальной машины Oracle / Sun)
  3. Таким образом, выгода может быть либо: вы можете дать приложению память, которая ему действительно необходима для работы (эффективно), либо если вы работаете в другом направлении: (несколько) ограничить максимальный объем памяти, используемый для управления распределение ресурсов между различными приложениями на одной машине.
2 голосов
/ 14 сентября 2011

Уже был вопрос о Java и памяти SO: Объяснение памяти Java

Очень хорошая статья о памяти Java найдена здесь .Он дает обзор памяти, как она используется, как она очищается и как ее можно измерить.

Значения по умолчанию для памяти (ранее Java 6):

-Xms размер в байтах Устанавливает начальный размер кучи Java.Размер по умолчанию - 2097152 (2 МБ).Значения должны быть кратны и превышать 1024 байта (1 КБ).(Флаг -server увеличивает размер по умолчанию до 32 МБ.)

-Xmn размер в байтах Устанавливает начальный размер кучи Java для генерации Eden.Значением по умолчанию является 640K.(Флаг -server увеличивает размер по умолчанию до 2M.)

-Xmx размер в байтах Устанавливает максимальный размер, до которого может увеличиваться куча Java.Размер по умолчанию составляет 64M.(Флаг -server увеличивает размер по умолчанию до 128 МБ.) Максимальный предел кучи составляет около 2 ГБ (2048 МБ).

Другой источник ( здесь ) утверждает, что в Java 6размер кучи по умолчанию зависит от объема системной памяти.

1 голос
/ 14 сентября 2011

Я предполагаю, что это должно помочь избежать высокого потребления памяти (из-за ошибок или из-за большого количества выделений и освобождений). Это можно использовать, если вы разрабатываете систему с низким объемом памяти (например, старый компьютер с небольшим объемом оперативной памяти, мобильные телефоны и т. Д.).

В качестве альтернативы, используйте это, чтобы увеличить предел памяти по умолчанию, если его недостаточно для вас, и вы получаете OutOfMemoryException s для нормального поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...