В Sun JVM 1.6 на компьютере серверного класса (то есть на компьютере с 2 ЦП и не менее 2 ГБ физической памяти ) максимальный размер кучи по умолчанию равен , меньшему 1/4 физическая память или 1 ГБ . Использование -Xmx
позволяет изменить это.
Почему вы хотите ограничить объем памяти, используемой Java? Две причины.
Во-первых, автоматическое управление памятью в Java имеет тенденцию захватывать как можно больше памяти из операционной системы, а затем управлять ею в интересах программы. Если вы выполняете другие программы на том же компьютере, что и ваша Java-программа, то она будет захватывать больше своей доли памяти, оказывая на них давление. Если вы запускаете несколько копий своей Java-программы, они будут конкурировать друг с другом, и в некоторых случаях вам может не хватить памяти. Ограничение размера кучи позволяет вам управлять этим: если у вас 32 ГБ ОЗУ и четыре процесса, вы можете ограничить каждую кучу примерно до 8 ГБ (чуть меньше - лучше) и быть уверенным, что все они будут полезны. получить нужное количество памяти.
Во-вторых (действительно, еще один аспект первого), если процесс захватывает больше памяти, чем операционная система может предоставить из физической памяти, он использует виртуальную память, которая выгружается на диск. Это очень медленно. Java может уменьшить использование памяти, заставляя сборщик мусора работать тяжелее. Это также медленно - но не так медленно, как переход на диск. Таким образом, вы можете ограничить размер кучи, чтобы избежать подкачки Java-процесса и, таким образом, повысить производительность.