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

<figure><img src="/files/xogBAi59CWvSuhrmMQpA" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Обязательно учтите, что аргументы следует подбирать индивидуально под оборудование сервера, а также версию Java.
{% endhint %}

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

```
java -jar server.jar
```

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

## Теперь о самих параметрах <a href="#teper-o-samikh-parametrakh" id="teper-o-samikh-parametrakh"></a>

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

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

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

## Основные флаги <a href="#osnovnye-flagi" id="osnovnye-flagi"></a>

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

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

## Выделение оперативной памяти <a href="#vydelenie-operativnoi-pamyati" id="vydelenie-operativnoi-pamyati"></a>

{% hint style="info" %}
Аргументы поддерживают как «**M**‎» для мегабайтов, так и «‎**G**» для гигабайтов. Например, аргумент **Xms2G** будет запускать сервер с **2-мя** гигабайтами **оперативной памяти**.
{% endhint %}

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

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

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

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

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

## Сборщики различного «мусора‎» <a href="#sborshiki-razlichnogo-musora" id="sborshiki-razlichnogo-musora"></a>

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

**-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
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.qwins.co/minecraft/parametry-zapuska.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
