Параметры запуска

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

Обязательно учтите, что аргументы следует подбирать индивидуально под оборудование сервера, а также версию Java.

Начнем с небольшого примера:

java -jar server.jar

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

Теперь о самих параметрах

-jar — этот аргумент указывает тип запускаемого Java-файла.

name.jar — название запускаемого файла.

nogui — осуществляет запуск сервера без графического интерфейса, потому что он нам попросту не нужен.

Основные флаги

-xincgc — активирует «‎сборщик мусора», который время от времени будет выгружать неиспользуемую оперативную память. Тип сборщика автоматически выбирается в зависимости от версии Java.

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

Выделение Оперативной памяти

Аргументы поддерживают как «M‎» для мегабайтов, так и «‎G» для гигабайтов. Например, аргумент Xms2G будет запускать сервер с 2-мя гигабайтами Оперативной памяти.

-Xmx0000M — количество максимальной выделяемой памяти для сервера.

-Xms0000M — количество минимальной выделяемой памяти для сервера.

-Xmn0000M — количество выделяемой памяти для временных объектов

-XX:MaxPermSize=0000M — количество памяти для PermGen Space (не работает на Java 8).

-XX:SharedReadOnlySize=0000M — количество памяти под read-only-место в PermGen.

Сборщики различного «мусора‎»

Для одноядерных процессоров используйте любой сборщик мусора, но не указывайте количество потоков для него. На данный момент лучшим сборщиком является ConcMarkSweepGC. Чем больше число SurvivorRatio — тем лучше, соответственно тем меньше старые объекты будут захламлять Оперативную память. Чем больше значение TargetSurvivorRatio, тем большее количество объектов будет очищаться (желательно не ставить более 90). Использовать MaxGCPauseMillis лучше всего с G1GC или с конкретно указанным сборщиком мусора. AutoGCSelectPauseMillis — со сборщиком, который система сама выберет. G1HeapRegionSize лучше не устанавливать, java сама подберет оптимальное значение, использовать рекомендуем только в случае, если Вы знаете, что делаете.

-XX:+UseSerialGC — включает сборщик мусора, который работает в 1-ом потоке.

-XX:+UseConcMarkSweepGC — включает сборщик мусора, который использует мощь нескольких ядер процессора.

-XX:ConcGCThreads=2 — количество потоков для сборщика мусора.

-XX:+UseG1GC — активирует новый сборщик мусора, который разделяет всю память на определенные участки, и, благодаря использованию нескольких ядер, собирает со всех участков неиспользуемую память.

-XX:G1HeapRegionSize=32 — количество Оперативной памяти, выделяемой под каждый участок.

-XX:AutoGCSelectPauseMillis=2500 — количество времени в миллисекундах между вызовом автоматически выбранного сборщика мусора.

-XX:MaxGCPauseMillis=1000 — длительность времени в миллисекундах между вызовом конкретного сборщика мусора. Для G1GC исполняет роль максимально установленного промежутка.

-XX:SurvivorRatio=8 — количество радиуса для существования выживающих объектов (чем меньше число, тем больше места). Большее место дает возможность недавно сгенерированным объектам существовать дольше перед очисткой мусора.

-XX:TargetSurvivorRatio=90 — количество места в процентах под выживающие объекты, что позволит очищать больше неиспользуемых объектов во время сборки мусора.

-XX:+UseBiasedLocking — ускорение синхронизации объектов на многоядерных процессорах.

-XX:+UseFastAccessorMethods — использование оптимизированных версий вызова методов.

-XX:+UseFastEmptyMethods — исключение из компиляции пустых методов.

XX:+UseCompressedOops — уменьшение размеров указателя, заголовков, а также сдвигов внутри созданных объектов. В зависимости от кода сэкономит 20-60% Оперативной памяти.

В общем итоге у нас получился подобный скрипт для запуска сервера:

java -Xincgc -Xms512M -Xmx4G -XX:MaxPermSize=128M -XX:SharedReadOnlySize=30M -XX:+UseConcMarkSweepGC -XX:+UseBiasedLocking -XX:+UseFastAccessorMethods -XX:+UseCompressedOops -jar server.jar nogui