-
-
Save A-So-Nya/36a6ac3558449452b121db030c86ee27 to your computer and use it in GitHub Desktop.
JVM-аргуменнты
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Source: https://cwelth.com/manuals.php?mid=2 | |
Руководство по аргументам запуска Java | |
Руководство, которое поможет вам попробовать оптимизировать мои (и не только мои) сборки для запуска на слабых компьютерах путем использования аргументов запуска java для minecraft. Однако, владельцы мощных компьютеров тоже смогут почерпнуть для себя что-нибудь полезное. Например, некоторые флаги потенциально помогут избавиться от мелких неприятных пролагиваний. | |
Отказ от ответственности: | |
Это руководство является переводом алгоритма оптимизации Java "Paul's Reborn Neonate" и поможет оптимизировать работу майнкрафта как для ваниллы, так и для модпаков. | |
Все потенциальные ухудшения в производительности остаются на совести автора оригинального алгоритма. Я не несу ответственность за корректную работоспособность перечисленных ниже параметров запуска. Все флаги, описанные в данном руководстве, читатель использует на свой страх и риск. | |
Оригинальная статья: https://www.minecraftforum.net/forums/minecraf...-minecraft-jvm-arguments-guide | |
После выполнения рекомендаций из этого руководства, вы заметите следующее: | |
- Замедление операций по работе с памятью (из-за необходимости частого высвобождения) | |
- Ускорение обработки операций процессором и использование быстрых математических алгоритмов (Процессор будет использоваться более эффективно) | |
- Максимизировано использование Garbage Collector'а (сборка будет использовать минимальное количество памяти) | |
- Замедление загрузки модпака (из-за более эффективной работы с памятью) | |
- Более отзывчивый мир, более стабильный TPS (Из-за эффективной работы с ресурсами процессора) | |
- Большее количество параллельных вычислений (Больше параллельных потоков) | |
Начните тест со следующим набором аргументов (изменяйте их значения по необходимости): | |
-mx1G -XX:InitiatingHeapOccupancyPercent=10 -XX:AllocatePrefetchStyle=1 -XX:+UseSuperWord -XX:+OptimizeFill -XX:LoopUnrollMin=4 -XX:LoopMaxUnroll=16 -XX:+UseLoopPredicate -XX:+RangeCheckElimination -XX:+CMSCleanOnEnter -XX:+EliminateLocks -XX:+DoEscapeAnalysis -XX:+TieredCompilation -XX:+UseCodeCacheFlushing -XX:+UseFastJNIAccessors | |
-XX:+CMSScavengeBeforeRemark -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -XX:+ScavengeBeforeFullGC -XX:+AlwaysPreTouch -XX:+UseFastAccessorMethods -XX:+UnlockExperimentalVMOptions -XX:G1HeapWastePercent=10 -XX:G1MaxNewSizePercent=10 -XX:G1HeapRegionSize=32M -XX:G1NewSizePercent=10 -XX:MaxGCPauseMillis=100 -XX:+OptimizeStringConcat -XX:+UseParNewGC -XX:+UseNUMA -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=2 -XX:+DisableExplicitGC | |
Аргументы, которые нужно изменять в первую очередь: | |
-mx1G | |
Динамическое выделение памяти. Этот флаг заставляет java выделять память динамически по мере необходимости, а не весь объем сразу. | |
Установите в значение максимально допустимого объема памяти. | |
-Xss2048k | |
Параметр изменяет размер стэка для потоков процессора (128, 512, 1024, 2048, 4096) | |
Установлено оптимальное значение, однако, можно поиграться с параметром, чтобы добиться большей стабильности (Может вызывать зависания!) | |
-XX:+UseLargePages | |
Установите этот флаг, если выделяете для сборки большое количество памяти. | |
-XX:ParallelGCThreads=8 | |
Количество потоков Garbage Collector'а (1 физическое ядро = 1 поток, если у вас включен Hyperthreading, то 1 физическое ядро = 2 потока) | |
Установите согласно количеству ядер вашего процессора. | |
-XX:SurvivorRatio=1 | |
Определяет "EDEN Space", каждая единица равна 0,5GB памяти для объектов, которые создаются при загрузке. | |
Определите, какую часть памяти вы готовы выделить на стартовые объекты. | |
-XX:MaxGCPauseMillis=250 | |
Минимальная пауза между запуском Garbage Collector'а в миллисекундах. | |
Попробуйте выставлять разные значения, чтобы избежать небольшого периодического лага. | |
-XX:MaxMetaspaceSize=320m | |
Выделяет постоянную память. Алгоритм подразумевает использование 300 мебагайт на каждые 200 модов (в среднем). | |
Внимание! Этот флаг может вызывать ошибки "Out of memory"! | |
Аргументы, которые крайне рекомендуется включить в список запуска: | |
-mx1G | |
Динамическое выделение памяти. Этот флаг заставляет java выделять память динамически по мере необходимости, а не весь объем сразу. | |
Установите в значение максимально допустимого объема памяти. | |
-XX:+UseConcMarkSweepGC | |
Удаляет старые объекты из буфера Garbage Collector'а. Оптимизирует использование памяти. | |
-XX:+CMSClassUnloadingEnabled | |
Высвобождает выделенную, но давно не используемую память. | |
-XX:+DisableExplicitGC | |
Заставляет Garbage Collector игнорировать принудительные вызовы, которые могут отрицательно сказаться на производительности. | |
-XX:+UseCompressedOops | |
Позволяет использовать 32-битные ссылки в 64-битном окружении. | |
Сохраняет приличное количество памяти в некоторых случаях. | |
-XX:+UseNUMA | |
Включает использование архитектуры NUMA. | |
Оптимизирует алгоритмы работы с памятью и потоками процессора. | |
-XX:+UseParNewGC | |
Включает распараллеливание вызовов Garbage Collector'а. | |
Снижает задержки при вызовах GC, и заставляет игру выполняться более плавно. | |
-XX:G1NewSizePercent=10 | |
Устанавливает процент памяти, которая будет выделяться на новые объекты при их создании. | |
Снижает используемый объем памяти. | |
-XX:G1ReservePercent=10 | |
Резервирует процент памяти, используемый на G1. | |
Не только снижает используемый объем памяти, но и предотвращает ее глобальный рост. | |
-XX:G1HeapRegionSize=32M | |
Устанавливает размер области памяти для G1. | |
Помимо процентного указания, целесообразно указать и реальное значение памяти. | |
-XX:G1MaxNewSizePercent=10 | |
Устанавливает максимальный процент памяти, которая будет выделяться на новые объекты при их создании. | |
Заставим наш GC запускаться чаще, но не слишком часто. | |
-XX:G1HeapWastePercent=10 | |
Устанавливает процент "мусора" в GC, который считается допустимым. | |
Не будем засорять память всякой ненужной фигней. | |
-XX:+UnlockExperimentalVMOptions | |
Разрешает использование всех перечисляемых здесь аргументов. | |
Обязательно установите этот флаг, если играетесь с аргументами. | |
-XX:+OptimizeStringConcat | |
Произвольные недокументированные алгоритмы оптимизации работы со строками. | |
Видимо, что-то улучшает, но, главное, не делает хуже. | |
-XX:+UseFastAccessorMethods | |
Использовать оптимизированные методы доступа. | |
Исключает различные проверки при обращении к объектам. Увеличивает скорость работы, но может вызывать нестабильность, если автор мода - лентяй. | |
-XX:+AlwaysPreTouch | |
Очищает выделяемую область памяти перед использованием. | |
Замедляет загрузку, однако увеличивает общую производительность при работе с большими объемами памяти. | |
-XX:+ScavengeBeforeFullGC | |
Сначала очищает новые объекты в GC, а затем уже проводит полный цикл. | |
Снижает затраты памяти на GC. | |
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses | |
Отключает часовые перерывы в работе GC из RMI, и выгружает классы. | |
Разгружает память и снижает количество задержек при работе GC. | |
-XX:+CMSScavengeBeforeRemark | |
Пытается очистить мелкие объекты перед запуском полного цикла GC. | |
Снижает лаг, оптимизирует работу с памятью. | |
-XX:+AlwaysTenure | |
Использует старый алгоритм GC для оставшихся объектов. | |
Флаг нужно использовать при включении новых алгоритмов GC, однако, он нам ломает всю оптимизацию. | |
-XX:+UseFastJNIAccessors | |
Использовать быстрые алгоритмы доступа к сторонним библиотекам, написанным на других языках. | |
-XX:+UseCodeCacheFlushing | |
Сброс страниц кеша для снижения объема используемой памяти. | |
-XX:+TieredCompilation | |
Выключает компиляцию 1, 2 и 3 уровней для увеличения скорости компиляции. | |
Сильно оптимизирует работу процессора и памяти. | |
-XX:+AggressiveOpts | |
Использование этого флага совместно с "AutoBoxCacheMax" (который оптимизирует работу процессора) позволит поднять производительность за счет увеличения объема используемой памяти. | |
Включите этот флаг, если готовы пожертвовать дополнительными 10-50MB памяти. | |
-XX:+UseBiasedLocking | |
Используется на многоядерных процессорах для увеличения производительности параллельных вычислений. | |
Включите флаг, если у вас больше двух физических ядер. | |
-XX:+DoEscapeAnalysis | |
Оптимизирует задержки при параллельных вычислениях. | |
Включите флаг, если у вас больше двух физических ядер. | |
-XX:+EliminateLocks | |
Оптимизирует задержки при параллельных вычислениях. | |
Включите флаг, если у вас больше двух физических ядер. | |
-XX:+CompileThreshold | |
Использовать быстрый алгоритм профайлинга. | |
Может помочь со скоростью загрузки, однако не всегда работает. | |
-XX:+CMSCleanOnEnter | |
Улучшает производительность снижая допустимое количество "грязных карт". | |
Сам не понимаю, как это работает. | |
-XX:AllocatePrefetchStyle=1 | |
Включает предзагружку бОльшего количества скомпилированного кода. | |
Флаг используется по-умолчанию в Java версий 9+ | |
-XX:+UseSuperWord -XX:+OptimizeFill -XX:LoopUnrollMin=4 -XX:LoopMaxUnroll=16 -XX:+UseLoopPredicate -XX:+RangeCheckElimination | |
Увеличивает производительность циклов и использует оптимизированные вычислительные методы, для ускорения обработки. | |
Спасибо Ивану Мамонтову | |
-XX:InitiatingHeapOccupancyPercent=10 | |
Определяет процент памяти, когда следует запустить Garbage Collector | |
Let's force the GC to collect at 10% of it's limit | |
Более часто - меньше производительность, менее часто - меньше использованной памяти. | |
Аргументы, которые не следует использовать: | |
-XX:+ReduceSignalUsage | |
Снижает количество сигнализации между VM и процессором. | |
Снижение производительности на 1-4% | |
-XX:+UseMembar | |
Включает алгоритм "true memory" для совместимости со старым кодом. | |
Снижение производительности на 10% | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment