Guest User

Untitled

a guest
Jun 27th, 2020
4,709
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.01 KB | None | 0 0
  1. Руководство по аргументам запуска Java
  2.  
  3. Руководство, которое поможет вам попробовать оптимизировать мои (и не только мои) сборки для запуска на слабых компьютерах путем использования аргументов запуска java для minecraft. Однако, владельцы мощных компьютеров тоже смогут почерпнуть для себя что-нибудь полезное. Например, некоторые флаги потенциально помогут избавиться от мелких неприятных пролагиваний.
  4.  
  5. Отказ от ответственности:
  6. Это руководство является переводом алгоритма оптимизации Java "Paul's Reborn Neonate" и поможет оптимизировать работу майнкрафта как для ваниллы, так и для модпаков.
  7. Все потенциальные ухудшения в производительности остаются на совести автора оригинального алгоритма. Я не несу ответственность за корректную работоспособность перечисленных ниже параметров запуска. Все флаги, описанные в данном руководстве, читатель использует на свой страх и риск.
  8.  
  9. Оригинальная статья: https://www.minecraftforum.net/forums/minecraf...-minecraft-jvm-arguments-guide
  10.  
  11. После выполнения рекомендаций из этого руководства, вы заметите следующее:
  12. - Замедление операций по работе с памятью (из-за необходимости частого высвобождения)
  13. - Ускорение обработки операций процессором и использование быстрых математических алгоритмов (Процессор будет использоваться более эффективно)
  14. - Максимизировано использование Garbage Collector'а (сборка будет использовать минимальное количество памяти)
  15. - Замедление загрузки модпака (из-за более эффективной работы с памятью)
  16. - Более отзывчивый мир, более стабильный TPS (Из-за эффективной работы с ресурсами процессора)
  17. - Большее количество параллельных вычислений (Больше параллельных потоков)
  18.  
  19. Начните тест со следующим набором аргументов (изменяйте их значения по необходимости):
  20.  
  21. -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
  22. -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
  23.  
  24.  
  25.  
  26. Аргументы, которые нужно изменять в первую очередь:
  27.  
  28. -mx1G
  29. Динамическое выделение памяти. Этот флаг заставляет java выделять память динамически по мере необходимости, а не весь объем сразу.
  30. Установите в значение максимально допустимого объема памяти.
  31.  
  32. -Xss2048k
  33. Параметр изменяет размер стэка для потоков процессора (128, 512, 1024, 2048, 4096)
  34. Установлено оптимальное значение, однако, можно поиграться с параметром, чтобы добиться большей стабильности (Может вызывать зависания!)
  35.  
  36. -XX:+UseLargePages
  37. Установите этот флаг, если выделяете для сборки большое количество памяти.
  38.  
  39. -XX:ParallelGCThreads=8
  40. Количество потоков Garbage Collector'а (1 физическое ядро = 1 поток, если у вас включен Hyperthreading, то 1 физическое ядро = 2 потока)
  41. Установите согласно количеству ядер вашего процессора.
  42.  
  43. -XX:SurvivorRatio=1
  44. Определяет "EDEN Space", каждая единица равна 0,5GB памяти для объектов, которые создаются при загрузке.
  45. Определите, какую часть памяти вы готовы выделить на стартовые объекты.
  46.  
  47. -XX:MaxGCPauseMillis=250
  48. Минимальная пауза между запуском Garbage Collector'а в миллисекундах.
  49. Попробуйте выставлять разные значения, чтобы избежать небольшого периодического лага.
  50.  
  51. -XX:MaxMetaspaceSize=320m
  52. Выделяет постоянную память. Алгоритм подразумевает использование 300 мебагайт на каждые 200 модов (в среднем).
  53. Внимание! Этот флаг может вызывать ошибки "Out of memory"!
  54.  
  55.  
  56.  
  57. Аргументы, которые крайне рекомендуется включить в список запуска:
  58.  
  59. -mx1G
  60. Динамическое выделение памяти. Этот флаг заставляет java выделять память динамически по мере необходимости, а не весь объем сразу.
  61. Установите в значение максимально допустимого объема памяти.
  62.  
  63. -XX:+UseConcMarkSweepGC
  64. Удаляет старые объекты из буфера Garbage Collector'а. Оптимизирует использование памяти.
  65.  
  66. -XX:+CMSClassUnloadingEnabled
  67. Высвобождает выделенную, но давно не используемую память.
  68.  
  69. -XX:+DisableExplicitGC
  70. Заставляет Garbage Collector игнорировать принудительные вызовы, которые могут отрицательно сказаться на производительности.
  71.  
  72. -XX:+UseCompressedOops
  73. Позволяет использовать 32-битные ссылки в 64-битном окружении.
  74. Сохраняет приличное количество памяти в некоторых случаях.
  75.  
  76. -XX:+UseNUMA
  77. Включает использование архитектуры NUMA.
  78. Оптимизирует алгоритмы работы с памятью и потоками процессора.
  79.  
  80. -XX:+UseParNewGC
  81. Включает распараллеливание вызовов Garbage Collector'а.
  82. Снижает задержки при вызовах GC, и заставляет игру выполняться более плавно.
  83.  
  84. -XX:G1NewSizePercent=10
  85. Устанавливает процент памяти, которая будет выделяться на новые объекты при их создании.
  86. Снижает используемый объем памяти.
  87.  
  88. -XX:G1ReservePercent=10
  89. Резервирует процент памяти, используемый на G1.
  90. Не только снижает используемый объем памяти, но и предотвращает ее глобальный рост.
  91.  
  92. -XX:G1HeapRegionSize=32M
  93. Устанавливает размер области памяти для G1.
  94. Помимо процентного указания, целесообразно указать и реальное значение памяти.
  95.  
  96. -XX:G1MaxNewSizePercent=10
  97. Устанавливает максимальный процент памяти, которая будет выделяться на новые объекты при их создании.
  98. Заставим наш GC запускаться чаще, но не слишком часто.
  99.  
  100. -XX:G1HeapWastePercent=10
  101. Устанавливает процент "мусора" в GC, который считается допустимым.
  102. Не будем засорять память всякой ненужной фигней.
  103.  
  104. -XX:+UnlockExperimentalVMOptions
  105. Разрешает использование всех перечисляемых здесь аргументов.
  106. Обязательно установите этот флаг, если играетесь с аргументами.
  107.  
  108. -XX:+OptimizeStringConcat
  109. Произвольные недокументированные алгоритмы оптимизации работы со строками.
  110. Видимо, что-то улучшает, но, главное, не делает хуже.
  111.  
  112. -XX:+UseFastAccessorMethods
  113. Использовать оптимизированные методы доступа.
  114. Исключает различные проверки при обращении к объектам. Увеличивает скорость работы, но может вызывать нестабильность, если автор мода - лентяй.
  115.  
  116. -XX:+AlwaysPreTouch
  117. Очищает выделяемую область памяти перед использованием.
  118. Замедляет загрузку, однако увеличивает общую производительность при работе с большими объемами памяти.
  119.  
  120. -XX:+ScavengeBeforeFullGC
  121. Сначала очищает новые объекты в GC, а затем уже проводит полный цикл.
  122. Снижает затраты памяти на GC.
  123.  
  124. -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
  125. Отключает часовые перерывы в работе GC из RMI, и выгружает классы.
  126. Разгружает память и снижает количество задержек при работе GC.
  127.  
  128. -XX:+CMSScavengeBeforeRemark
  129. Пытается очистить мелкие объекты перед запуском полного цикла GC.
  130. Снижает лаг, оптимизирует работу с памятью.
  131.  
  132. -XX:+AlwaysTenure
  133. Использует старый алгоритм GC для оставшихся объектов.
  134. Флаг нужно использовать при включении новых алгоритмов GC, однако, он нам ломает всю оптимизацию.
  135.  
  136. -XX:+UseFastJNIAccessors
  137. Использовать быстрые алгоритмы доступа к сторонним библиотекам, написанным на других языках.
  138.  
  139. -XX:+UseCodeCacheFlushing
  140. Сброс страниц кеша для снижения объема используемой памяти.
  141.  
  142. -XX:+TieredCompilation
  143. Выключает компиляцию 1, 2 и 3 уровней для увеличения скорости компиляции.
  144. Сильно оптимизирует работу процессора и памяти.
  145.  
  146. -XX:+AggressiveOpts
  147. Использование этого флага совместно с "AutoBoxCacheMax" (который оптимизирует работу процессора) позволит поднять производительность за счет увеличения объема используемой памяти.
  148. Включите этот флаг, если готовы пожертвовать дополнительными 10-50MB памяти.
  149.  
  150. -XX:+UseBiasedLocking
  151. Используется на многоядерных процессорах для увеличения производительности параллельных вычислений.
  152. Включите флаг, если у вас больше двух физических ядер.
  153.  
  154. -XX:+DoEscapeAnalysis
  155. Оптимизирует задержки при параллельных вычислениях.
  156. Включите флаг, если у вас больше двух физических ядер.
  157.  
  158. -XX:+EliminateLocks
  159. Оптимизирует задержки при параллельных вычислениях.
  160. Включите флаг, если у вас больше двух физических ядер.
  161.  
  162. -XX:+CompileThreshold
  163. Использовать быстрый алгоритм профайлинга.
  164. Может помочь со скоростью загрузки, однако не всегда работает.
  165.  
  166. -XX:+CMSCleanOnEnter
  167. Улучшает производительность снижая допустимое количество "грязных карт".
  168. Сам не понимаю, как это работает.
  169.  
  170. -XX:AllocatePrefetchStyle=1
  171. Включает предзагружку бОльшего количества скомпилированного кода.
  172. Флаг используется по-умолчанию в Java версий 9+
  173.  
  174. -XX:+UseSuperWord -XX:+OptimizeFill -XX:LoopUnrollMin=4 -XX:LoopMaxUnroll=16 -XX:+UseLoopPredicate -XX:+RangeCheckElimination
  175. Увеличивает производительность циклов и использует оптимизированные вычислительные методы, для ускорения обработки.
  176. Спасибо Ивану Мамонтову
  177.  
  178. -XX:InitiatingHeapOccupancyPercent=10
  179. Определяет процент памяти, когда следует запустить Garbage Collector
  180. Let's force the GC to collect at 10% of it's limit
  181. Более часто - меньше производительность, менее часто - меньше использованной памяти.
  182.  
  183.  
  184.  
  185. Аргументы, которые не следует использовать:
  186.  
  187. -XX:+ReduceSignalUsage
  188. Снижает количество сигнализации между VM и процессором.
  189. Снижение производительности на 1-4%
  190.  
  191. -XX:+UseMembar
  192. Включает алгоритм "true memory" для совместимости со старым кодом.
  193. Снижение производительности на 10%
Advertisement
Add Comment
Please, Sign In to add comment