⚙ОПТИМИЗАЦИЯ JVM ДЛЯ MINECRAFT⚙
Полное руководство по настройке Java Virtual Machine для серверов и клиентов
📋 СОДЕРЖАНИЕ
- Введение и основы
- Особенности настройки на Pterodactyl
- Выбор JRE: какую Java использовать?
- Выбор JVM: HotSpot vs OpenJ9
- Флаги Aikar — универсальный стандарт
- Продвинутые базовые флаги (brucethemoose)
- Оптимизация сборки мусора (GC)
- G1GC: клиент и сервер
- Shenandoah GC: лучший выбор для клиента
- ZGC: для мощных серверов
- GraalVM Enterprise Edition
- Настройка памяти
- Large Pages
- Аргументы JVM в официальном лаунчере
- Исследование UltimateBoomer
- Оптимизация для систем с малым объёмом ОЗУ
- Дополнительные советы по производительности
- Полезные инструменты и ссылки
I.ВВЕДЕНИЕ
Оптимизация аргументов Java Virtual Machine (JVM) стала неотъемлемой частью настройки серверов Minecraft. Грамотно подобранные параметры позволяют:
- ✔ Улучшить производительность (TPS на сервере, FPS на клиенте)
- ✔ Снизить задержки и избавиться от микрофризов
- ✔ Оптимизировать использование оперативной памяти
- ✔ Ускорить генерацию чанков
- ✖ Не заменят оптимизирующие моды (Spark, Sodium, Lithium и т.д.)
⚠ Важно понимать: Эти твики заметно снижают задержки и фризы, но дают лишь умеренный прирост TPS и минимальный прирост среднего FPS. Для максимального FPS важнее актуальные драйверы GPU и перформанс-моды.
II.ОСОБЕННОСТИ НАСТРОЙКИ НАPTERODACTYL

При использовании панели Pterodactyl необходимо учитывать критически важный момент:
❗ Параметр -Xms (минимальная память) НЕ должен быть равен -Xmx (максимальной)!
Рекомендуется устанавливать Xms на 1–1.5 ГБ меньше, чем Xmx. Это защищает сервер от вмешательства системы OOMKiller (Out Of Memory Killer), которая может принудительно завершить процесс.
Пример: При Xmx=8G → устанавливайте Xms=6G или Xms=7G
На всех остальных платформах (VDS, выделенный сервер, локально) рекомендуется устанавливать Xms = Xmx, чтобы минимизировать накладные расходы на сборку мусора.
III.ВЫБОР ВЕРСИИ JAVA (JRE)
Какую версию Java использовать?
- Java 21 — актуальная LTS-версия, рекомендуется для Minecraft 1.20.5+
- Java 17 — рекомендуется для Minecraft 1.16.5–1.20.4 и большинства модов
- Java 11 — если Java 17 несовместима с вашими модами
- Java 8 — только для Minecraft 1.12.2 и ниже
Откуда скачать JRE?
JRE от Azul, Microsoft, Adoptium, Amazon и других вендоров в целом идентичны. Но есть исключения:
- Oracle GraalVM Enterprise Edition — наиболее агрессивный JIT-компилятор. Даёт до 20%+ прироста при генерации чанков на сервере. (подробнее — в разделе GraalVM)
- Adoptium (AdoptOpenJDK) — надёжный, широко совместимый выбор по умолчанию: adoptium.net
- Intel Clear Linux OpenJDK — тот же код OpenJDK, но сборка оптимизирована для новых CPU. Только через Clear Linux репозитории.
- Azul Prime OpenJDK — очень быстрый (hooks into LLVM), но несовместим с большинством модов. Только Linux.
- Red Hat OpenJDK 8 — единственная Java 8 сборка с поддержкой Shenandoah GC.
- IBM OpenJ9 — экономит ОЗУ, но в тестах более чем на 30% медленнее при генерации чанков.
💡 Не знаете что выбрать? Берите GraalVM EE для максимальной производительности, или Adoptium Java 17 JRE для надёжности и простоты.
IV.ВЫБОР JVM: HOTSPOT vs OPENJ9
HotSpot (стандарт)
- ✔ Высокая производительность в рантайме
- ✔ Поддерживает Shenandoah GC и ZGC
- ✔ Совместим со всеми модами и версиями Minecraft
- ✖ Потребляет больше оперативной памяти
OpenJ9 (IBM)
- ✔ Значительно меньшее потребление ОЗУ
- ✔ Быстрее стартует
- ✖ Более 30% медленнее при генерации чанков
- ✖ Больше колебаний FPS
- ✖ Некоторые старые версии Forge несовместимы
- ✖ Использует другие флаги (не совместимы со стандартными)
Лучший GC для OpenJ9: -Xgcpolicy:gencon — по производительности сопоставим с G1GC.
Вывод: Если у вашей системы достаточно ОЗУ — используйте HotSpot с Shenandoah. OpenJ9 — только при острой нехватке памяти.
V.ФЛАГИAIKAR— УНИВЕРСАЛЬНЫЙ СТАНДАРТ
Aikar предложил набор JVM-аргументов, ставший де-факто стандартом для серверов Minecraft. Эти параметры обеспечивают хорошую производительность и масштабируемость на любом железе.
Базовые флаги (до 12 ГБ памяти):
Java:
java -Xms10G -Xmx10G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 \
-XX:G1HeapWastePercent=5 \
-XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-jar server.jar noguiДополнительные параметры при памяти более 12 ГБ:
Замените соответствующие флаги на следующие значения:
- -XX:G1NewSizePercent=40
- -XX:G1MaxNewSizePercent=50
- -XX:G1HeapRegionSize=16M
- -XX:G1ReservePercent=15
- -XX:InitiatingHeapOccupancyPercent=20
🛠 Удобный генератор: Используйте Minecraft Flags Generator — Birdflop — инструмент автоматически учитывает объём памяти и платформу (в т.ч. Pterodactyl).
VI.ПРОДВИНУТЫЕ БАЗОВЫЕ ФЛАГИ
Источник: brucethemoose/Minecraft-Performance-Flags-Benchmarks
Эти флаги протестированы в бенчмарках и работают с любой Java 11+. Применяются как к серверу, так и к клиенту. Их необходимо дополнять флагами выбранного GC (см. ниже).
Java:
-XX:+UnlockExperimentalVMOptions
-XX:+UnlockDiagnosticVMOptions
-XX:+AlwaysActAsServerClassMachine
-XX:+AlwaysPreTouch
-XX:+DisableExplicitGC
-XX:+UseNUMA
-XX:NmethodSweepActivity=1
-XX:ReservedCodeCacheSize=400M
-XX:NonNMethodCodeHeapSize=12M
-XX:ProfiledCodeHeapSize=194M
-XX:NonProfiledCodeHeapSize=194M
-XX:-DontCompileHugeMethods
-XX:MaxNodeLimit=240000
-XX:NodeLimitFudgeFactor=8000
-XX:+UseVectorCmov
-XX:+PerfDisableSharedMem
-XX:+UseFastUnorderedTimeStamps
-XX:+UseCriticalJavaThreadPriority
-XX:ThreadPriorityPolicy=1
-XX:AllocatePrefetchStyle=3Пояснение ключевых флагов:
- -XX:+UseNUMA — оптимизации для многосокетных систем. Автоматически отключается, если неприменимо.
- -XX:-DontCompileHugeMethods — разрешает компиляцию «огромных» методов. В моддед-Minecraft их немало.
- -XX:ReservedCodeCacheSize=400M — резервирует больше места для скомпилированного кода. Стандартный лимит 250 МБ может заполняться в моддед-Minecraft.
- -XX:NmethodSweepActivity=1 — «холодный» код дольше остаётся в кэше.
- -XX:+UseCriticalJavaThreadPriority — потоки Minecraft не должны вытесняться GC или компилятором.
- -XX:AllocatePrefetchStyle=3 — агрессивный префетчинг. Несовместим с ZGC — при его использовании замените на =1.
- -XX:+UseFastUnorderedTimeStamps — избегает системных вызовов при получении временных меток.
VII.НАСТРОЙКА ПОТОКОВ GC
Java:
-XX:ConcGCThreads=[ЧИСЛО]Этот параметр задаёт максимальное количество фоновых потоков для сборщика мусора. По умолчанию: логические ядра / 4.
- 4 потока CPU → ConcGCThreads=2
- 6–8 ядер → ConcGCThreads=[кол-во реальных ядер − 2]
- Для ZGC и Shenandoah — рекомендуется увеличить это значение выше дефолтного
⚠ Опасность: Слишком мало потоков → GC не успевает, растут фризы и потребление RAM → краш. Слишком много → замедление игры, особенно на Java 8.
VIII.G1GC — СТАНДАРТНЫЙ СБОРЩИК МУСОРА
G1GC — сборщик мусора по умолчанию в JVM. Хорошо работает, но может создавать заметные паузы при большой куче. Единственный вариант для пользователей GraalVM EE.
G1GC для клиента:
Модифицированные флаги с короткими, но частыми паузами — оптимально для однопользовательской игры:
Java:
-XX:+UseG1GC
-XX:MaxGCPauseMillis=37
-XX:+PerfDisableSharedMem
-XX:G1HeapRegionSize=16M
-XX:G1NewSizePercent=23
-XX:G1ReservePercent=20
-XX:SurvivorRatio=32
-XX:G1MixedGCCountTarget=3
-XX:G1HeapWastePercent=20
-XX:InitiatingHeapOccupancyPercent=10
-XX:G1RSetUpdatingPauseTimePercent=0
-XX:MaxTenuringThreshold=1
-XX:G1SATBBufferEnqueueingThresholdPercent=30
-XX:G1ConcMarkStepDurationMillis=5.0
-XX:G1ConcRSHotCardLimit=16
-XX:G1ConcRefinementServiceIntervalMillis=150
-XX:GCTimeRatio=99G1GC для сервера:
На сервере допустимы более длинные паузы. Флаги близки к Aikar, но с улучшениями:
Java:
-XX:+UseG1GC
-XX:MaxGCPauseMillis=130
-XX:+UnlockExperimentalVMOptions
-XX:+DisableExplicitGC
-XX:+AlwaysPreTouch
-XX:G1NewSizePercent=28
-XX:G1HeapRegionSize=16M
-XX:G1ReservePercent=20
-XX:G1MixedGCCountTarget=3
-XX:InitiatingHeapOccupancyPercent=10
-XX:G1MixedGCLiveThresholdPercent=90
-XX:G1RSetUpdatingPauseTimePercent=0
-XX:SurvivorRatio=32
-XX:MaxTenuringThreshold=1
-XX:G1SATBBufferEnqueueingThresholdPercent=30
-XX:G1ConcMarkStepDurationMillis=5
-XX:G1ConcRSHotCardLimit=16
-XX:G1ConcRefinementServiceIntervalMillis=150IX.SHENANDOAH GC— ЛУЧШИЙ ВЫБОР ДЛЯ КЛИЕНТА
Shenandoah — это сборщик мусора с ультранизкими паузами, который выполняет большую часть работы параллельно с выполнением Java-программы. Время паузы при сборке мусора практически одинаково как для кучи объёмом 200 ГБ, так и для 2 ГБ.
Паузы GC — главная причина фризов в Minecraft. Стандартный G1GC вызывает заметные рывки. Shenandoah устраняет их почти полностью, выполняя сборку мусора конкурентно с работой игры.
Результаты тестов (UltimateBoomer):
- Стандартная настройка — частые рывки FPS:

- Стандартная настройка, 4 ГБ — реже, но более длительные паузы:

- Java + Shenandoah GC, 4 ГБ — рывки почти исчезли:

Флаги Shenandoah GC (клиент):
Java:
-XX:+UseShenandoahGC
-XX:ShenandoahGCMode=iu
-XX:ShenandoahGuaranteedGCInterval=1000000
-XX:AllocatePrefetchStyle=1Флаги для высокопроизводительного клиента (с базовыми флагами):
Java:
-Xms4G -Xmx4G
-XX:+UnlockExperimentalVMOptions
-XX:+UseShenandoahGC
-XX:ShenandoahGCMode=iu
-XX:ShenandoahGuaranteedGCInterval=1000000
-XX:+AlwaysPreTouch
-XX:AllocatePrefetchStyle=1Замените 4G на нужный объём памяти.
⚠ Важные ограничения:
- Shenandoah отсутствует в Java 8
- Shenandoah отсутствует в Oracle JDK — нужен AdoptOpenJDK, Red Hat OpenJDK или другой дистрибутив
- На Java 8 с Shenandoah — используйте Red Hat OpenJDK: developers.redhat.com
- Не используйте режим compact — он значительно снижает производительность
- Параметры «heuristic» и «mode» практически не влияют на результат (кроме compact)
- Несовместим с AllocatePrefetchStyle=3 — обязательно замените на =1
Совет по производительности:
- Shenandoah отлично работает на клиенте
- На сервере Shenandoah снижает общую пропускную способность (throughput) в тестах — для сервера с высокой нагрузкой предпочтителен ZGC или G1GC
- В тестах с 200+ модами и 4 ГБ ОЗУ — Shenandoah не вызывал заметных задержек
🛠 Быстрая сборка аргументов:Minecraft Flags Generator — Birdflop
Проверить совместимость JVM с Shenandoah:openjdk.java.net
X.ZGC— ДЛЯ МОЩНЫХ СЕРВЕРОВ
ZGC — сборщик мусора с нулевой ощутимой нагрузкой на сервер. Практически не создаёт пауз и не снижает TPS, однако требует больше ресурсов.
Когда использовать ZGC:
- ✔ Сервер с большим количеством памяти (от 16 ГБ и выше)
- ✔ Многоядерный CPU (8+ реальных ядер)
- ✔ Java 17 или выше (в Java 11 ZGC значительно хуже)
- ✖ Не рекомендуется на клиенте — значительное падение FPS
- ✖ Недоступен в Java 8
Флаги ZGC:
Java:
-XX:+UseZGC
-XX:AllocatePrefetchStyle=1
-XX:-ZProactive⚠ Обязательно: При использовании ZGC выделяйте больше ОЗУ и увеличивайте -XX:ConcGCThreads по сравнению с другими GC. ZGC несовместим с AllocatePrefetchStyle=3 — используйте =1.
XI.GRAALVM ENTERPRISE EDITION— МАКСИМУМ ПРОИЗВОДИТЕЛЬНОСТИ
GraalVM EE — новая JVM от Oracle с агрессивным JIT-компилятором. Даёт заметный прирост производительности сервера:
- ✔ До 20%+ ускорения генерации чанков на сервере
- ✔ Более агрессивная оптимизация Java-кода в рантайме
- ✖Совместим только с G1GC — ZGC и Shenandoah не поддерживаются
- ✖ Требует ручной установки вместо JRE лаунчера
Где скачать GraalVM EE:
Аргументы GraalVM EE 22+ (Java 17 / Java 11):
Java:
-XX:+UnlockExperimentalVMOptions
-XX:+UnlockDiagnosticVMOptions
-XX:+AlwaysActAsServerClassMachine
-XX:+AlwaysPreTouch
-XX:+DisableExplicitGC
-XX:+UseNUMA
-XX:AllocatePrefetchStyle=3
-XX:NmethodSweepActivity=1
-XX:ReservedCodeCacheSize=400M
-XX:NonNMethodCodeHeapSize=12M
-XX:ProfiledCodeHeapSize=194M
-XX:NonProfiledCodeHeapSize=194M
-XX:-DontCompileHugeMethods
-XX:+PerfDisableSharedMem
-XX:+UseFastUnorderedTimeStamps
-XX:+UseCriticalJavaThreadPriority
-XX:+EagerJVMCI
-Dgraal.TuneInlinerExploration=1
-Dgraal.CompilerConfiguration=enterpriseК этим аргументам добавьте флаги G1GC сервера из раздела VIII.
Совместимость с модами:
- GraalVM EE 22.3.0 и новее — исправлены все известные баги с модами Minecraft
- Старые версии: возможны проблемы с шейдерами (VectorizeSIMD делает сущности невидимыми с Optifine/Iris/Oculus). Решение: добавьте -Dgraal.VectorizeSIMD=false
- В 1.16.5 Astral Sorcery неправильно рендерятся созвездия — баг GraalVM CE и EE
XII.УПРАВЛЕНИЕ ПАМЯТЬЮ
Xms и Xmx — базовые параметры:
- -Xms — минимальный объём кучи (heap)
- -Xmx — максимальный объём кучи
Рекомендация: Устанавливайте Xms = Xmx для минимизации overhead'а GC. Единственное исключение — Pterodactyl и системы с критически малым объёмом ОЗУ (Xms ниже Xmx).
Сколько памяти выделять?
- Для ванильного Minecraft или лёгких модпаков — достаточно 2–4 ГБ
- Для тяжёлых модпаков (100+ модов) — 4–8 ГБ
- Не выделяйте лишнее — избыток памяти увеличивает паузы GC
Off-heap память:
Minecraft также использует внекучную (off-heap) память — например, для текстур. При загрузке текстурного пакета 256x с 4 ГБ кучи Minecraft может занять 12+ ГБ в диспетчере задач. Это нормально.

💡 Используйте мод Spark: Команда /sparkc gcmonitor покажет паузы GC в реальном времени. Частые длинные паузы → мало памяти или неверные флаги GC.
XIII.LARGE PAGES
⚠ На Windows требуются права администратора. Пропустите этот раздел, если вы не готовы к этому.
Включение Large Pages заметно улучшает производительность серверов и клиентов.
Добавьте к аргументам:
Java:
-XX:+UseLargePages -XX:LargePageSizeInBytes=2mНа Linux предпочтительнее:
Java:
-XX:+UseTransparentHugePagesИнструкции по включению:
На Windows необходимо запускать Java и лаунчер с правами администратора (галочка "Запускать от имени администратора" для javaw.exe, java.exe и launcher.exe).
Проверить, работает ли Large Pages, можно с флагом -Xlog:gc+init (Java 17).
XIV.JVM АРГУМЕНТЫ ВОФИЦИАЛЬНОМ ЛАУНЧЕРЕ
- Откройте Minecraft Launcher и перейдите в раздел «Установки» (Installations)

- Выберите нужный профиль и нажмите «Дополнительные настройки» (More Options)


- В разделе «Аргументы JVM» (JVM ARGUMENTS) измените существующие параметры или добавьте новые
XV.ИССЛЕДОВАНИЕULTIMATEBOOMERНА КЛИЕНТЕ

Для высокопроизводительных систем (достаточно ОЗУ):
- Скачайте JRE от AdoptOpenJDK (adoptium.net)
- Выберите OpenJDK 17 (или 11/15, если моды не поддерживают 17) с HotSpot JVM
- Скачайте zip-версию — установщик не нужен
- Разархивируйте в удобную папку (например, рядом с встроенным JRE: C:/Program Files (x86)/Minecraft Launcher/runtime)
- В профиле лаунчера укажите путь к новому Java: (Путь к JRE)/bin/javaw.exe
- Установите аргументы JVM:
Java:
-XmsNG -XmxNG
-XX:+UnlockExperimentalVMOptions
-XX:+UseShenandoahGC
-XX:ShenandoahGCMode=iu
-XX:ShenandoahGuaranteedGCInterval=1000000
-XX:+AlwaysPreTouch
-XX:AllocatePrefetchStyle=1Замените N на количество гигабайт памяти (например, 4G).
Для систем с малым объёмом ОЗУ (OpenJ9):
- Скачайте JRE от AdoptOpenJDK
- Выберите OpenJDK 15 (или 11/8 для совместимости с модами) с OpenJ9 JVM
- Скачайте zip-версию — установщик не нужен
- Разархивируйте и укажите путь в лаунчере аналогично варианту выше
- Установите аргументы JVM:
Java:
-XmsNG -XmxNG
-Xgcpolicy:genconЗамените N на объём памяти.
⚠ Примечание: Некоторые старые версии Forge несовместимы с OpenJ9 и новыми версиями Java.
XVI.ДОПОЛНИТЕЛЬНЫЕ СОВЕТЫ ПО ПРОИЗВОДИТЕЛЬНОСТИ
Для Windows:
- После запуска Minecraft установите для процесса Java приоритет «Выше нормального» в Диспетчере задач
- Закройте браузер, Discord и другие тяжёлые фоновые программы
- Убедитесь, что Minecraft использует дискретную GPU (проверьте во вкладке F3). Принудительно назначьте в Параметры Windows → Параметры графики
Для Linux:
- Используйте nice -n -10 или команду renice после запуска
- Рассмотрите использование Clear Linux для сервера — одна из наиболее оптимизированных дистрибуций из коробки
- Для серверов также хорош Oracle Linux (GraalVM EE доступен через пакетный менеджер)
Рекомендуемые перформанс-моды:
- Вместо Optifine — Sodium + Iris или Rubidium + Oculus
- Spark — профилировщик производительности, мониторинг GC
- Список полезных перформанс-модов
XVII.СРАВНИТЕЛЬНАЯ ТАБЛИЦА GC
| Сборщик мусора | Клиент | Сервер | ОЗУ | Java | Примечание |
|---|---|---|---|---|---|
| G1GC | Хорошо | Отлично | Любой | 8+ | Стандарт, обязателен для GraalVM EE |
| Shenandoah | Отлично | Умеренно | Любой | 11+ | Лучший выбор для клиента, не в Oracle JDK |
| ZGC | Плохо | Отлично | 16 ГБ+ | 17+ | Нет ощутимых пауз, нужно много ядер и ОЗУ |
| gencon (OpenJ9) | Хорошо | Хорошо | Малый | 8+ | Только с OpenJ9, экономия ОЗУ |
XVIII.ПОЛЕЗНЫЕ РЕСУРСЫ
Инструменты:
- Minecraft Flags Generator — Birdflop — генератор аргументов с учётом памяти и платформы
- brucethemoose/Minecraft-Performance-Flags-Benchmarks — репозиторий с бенчмарками флагов
Официальная документация:
- Oracle Java Docs
- OpenJDK Wiki
- Eclipse OpenJ9 Docs
[*]Shenandoah GC — официальная страница
[*]ZGC в Java 17 — подробный разбор
JRE и дистрибутивы Java:
- Adoptium (AdoptOpenJDK) — рекомендуется для большинства пользователей
- Oracle GraalVM EE
Полезные моды:
- Список перформанс-модов (NordicGamerFE)
- Spark — профилировщик, мониторинг GC (/sparkc gcmonitor)
Правильная настройка JVM-аргументов — ключевой элемент стабильной и плавной работы
серверов и клиентов Minecraft. Экспериментируйте осторожно: некорректные параметры могут привести к сбоям.
Вложения
Последнее редактирование:

