1. У вас ошибки и краши с лаунчером/клиентом? Прочтите это.
    Обязательно для прочтения: правила форума | игровые правила.

Принудительное выделение памяти процессу java.

Тема в разделе "Гайды & Инструкции", создана пользователем jadedcat, 3 апр 2015.

  1. jadedcat

    jadedcat Guest

    Регистрация:
    Сообщения:
    0
    Симпатии:
    0
    В java существует несколько областей памяти, размером каждой из которых можно управлять.

    Большинство лаунчеров могут регулировать только размер кучи (heap). В подробности вдаваться не буду, но эта область позволяет вместить большой объём данных не зависимо от количества переменных.
    Это, конечно, хорошо, но клиентам с большим количеством модов важна и еще одна область памяти - Permanent Gengeneration. Она отвечает, грубо говоря, за количество переменных, которым процесс java сможет оперировать. Именно в ней создаются все новые объекты, прежде чем переместиться в кучу (основная память).
    Эту область ланчеры позволяют регулировать очень и очень редко. На нашем сервере не позволяют.

    Итак, java позволяет оперировать размерами областей памяти (и другими параметрами ВМ) (ВМ - виртуальная машина джавы, JVM) несколькими способами, два основных из которых:
    - Аргументами командной строки (как это делают лаунчеры и BATники).
    - Специальной системной переменной _JAVA_OPTIONS

    О втором способе и о некоторых аргументах ВМ я и хочу сейчас рассказать. Оговорюсь сразу - я буду рассказывать, опираясь в примерах на операционную систему Windows 7, так как именно она стоит у меня на рабочем компьютере. Как устанавливать системные переменные для других ОС Вы сможете отыскать в интернете.

    Для того, чтобы создать системную переменную нужно:
    - Открыть Панель управления (Пуск - Панель управления) и выбрать меню Система. Либо, кликнув правой кнопкой мыши на Мой компьютер и выбрав Свойства.
    - В левой части открывшегося окна нажать Дополнительные параметры системы.
    - Перейти на вкладку Дополнительно и нажать Переменные среды...
    - В верхнем списке проверить наличие переменной _JAVA_OPTIONS, и если она есть - удалить её (выделив и нажав кнопку Удалить).
    - Нажать кнопку Создать...
    - В верхнее поле открывшегося окна (Имя переменной) писать _JAVA_OPTIONS, а в нижнее - необходимые аргументы ВМ (о них я расскажу в следующей части).
    - Закрыть все окна, нажав в каждом из них кнопку ОК.
    [​IMG]
    Аргументы Виртуальной Машины Java:
    -Xms Изначальный объем памяти кучи, который выделен ВМ. Идеальное, на мой взгляд, значение это 1024m. Больше не имеет смысла, чем больше памяти клиент откусит - тем более неповоротливым он станет. Существенное увеличение потребления памяти, вопреки ожиданию большинства игроков, только усугубит лаги.
    -Xmx Максимальный объем памяти кучи, доступный конкретному экземпляру ВМ. Именно этот параметр регулируется в лаунчере. Рекомендую устанавливать значение или равное предыдущему, или на 512m больше.
    -XX:permSize (чертовы смайлики, там двоеточие и англ P) Изначальный объем памяти типов (PermGen). Очень и очень полезен для клиентов с большим количеством модов. По-умолчанию выделяется 128m для x32 систем и 256m для x64. Идеальное значение для наших клиентов - 512m. Слишком большое значение выставлять не рекомендую.
    -XX:MaxPermSize Максимальный объем памяти типов. Крайне рекомендую устанавливать такой же объем, как и для прошлого аргумента.
    Внимание! Если у вас установлена Java 8, по последние 2 аргумента (-XX:permSize и -XX:MaxPermSize) не имеют ни какого эффекта. Дело в том, что в Java 8 область PermGen была упразднена и заменена на новый тип памяти metaspace, который более оптимизирован и его размер изменяется автоматически.

    -XX:+DoEscapeAnalysis Очень интересный аргумент с точки зрения программиста. В некоторых случаях позволяет ускорить алгоритмы до 10 раз. С точки зрения игрока - может немного увеличить ФПС, но не всегда.
    -XX:+AggressiveOpts Включает несколько других аргументов, которые приносят агрессивную оптимизацию в выполнение приложения. На практике - на некоторых компьютерах (я бы сказал на большинстве) дает довольно ощутимый прирост ФПС.
    -XX:+UseCompressedOops На x64 системах позволяет существенно (до 60%) сократить потребление памяти кучи. Из недостатков - невозможность задать рамер памяти кучи больше 4Гб (нам не актуально) и несущественные дополнительных расходы процессорного времени.
    -XX:+EliminateLocks Позволяет исправить некоторые, весьма нагружающие код, ляпы программистов. В теории должно немного поднять ФПС. На практике - не обращал внимания.

    Существует еще довольно много аргументов ВМ (больше 700), многие из которых довольно интересны, но вышеперечисленные дают самую заметную выгоду из всех. Есть еще вариант поиграться с настройками сборщика мусора, но эти эксперименты будут сильно зависеть от конкретного компьютера. О них я постараюсь написать в ближайшем времени в следующем посте этой темы.

    Итак, подводя итоги... На мой взгляд, хорошим набором аргументов ВМ будет следующий:
    Код:
    -Xms1024m -Xmx1536m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+DoEscapeAnalysis -XX:+AggressiveOpts -XX:+EliminateLocks
    Следует учесть, что для пользователей Java 8 строки "-XX:permSize=512m -XX:MaxPermSize=512m" не будут иметь ни какого смысла.

    Не бойтесь экспериментировать с аргументами, ни чего страшного с их помощью вы не сможете сделать, однако при их тонкой подгонке под свой компьютер можно получить очень большой прирост ФПС.

    Об ошибках.
    Иногда (всех причин я понять не смог) при таком указании аргументов ВМ некоторые процессы java (в том числе клиент и лаунчер) перестают работать. Выводится соответствующее сообщение вместо запуска ланчера (или другого приложения).
    В некоторых случаях это может быть вызвано некорректными аргументами. Попробуйте еще поэкспериментировать с ними.
    В некоторых случаях не запускаются только некоторые java приложения (например, Zona), в то время, как клиент майнкрафта очень хорошо работает. В таких случаях можно временно отключать настройку аргументов, переименовав _JAVA_OPTIONS, к примеру, в ex_JAVA_OPTIONS. Java сразу перестанет подхватывать такие инструкции.
    В некоторых, очень редких, случаях сама инструкция _JAVA_OPTIONS (даже с самыми безопасными аргументами) приводит к полной неработоспособности Java. В таких случаях я могу посоветовать только переустановку Java (именно сказать установочник с сайте java.com) и Windows. Некоторым помогает, но не всегда. Был случай, когда ни какими способами я так и не заставил работать эту инструкцию у друга.

    Любые вопросы и уточнения (кроме глупых) приветствуются.

    PS: Пожелание людям, хорошо знакомым с java: не нужно выставлять свои прекрасные знания напоказ, критикуя простоту и некоторые неточности моего рассказа об устройстве выделения памяти java и аргументах ВМ. Эти знания очень полезны разработчикам, однако простых игроков нагружать ими ни к чему. Я объяснял как это устроено только простейшим языком, чтобы не отталкивать людей от экспериментов, которые могут им помочь.

    PPS: Еще пара небольших советов, раз уж я всех посылаю сюда:
    1) Переустановить Windows на версию х64. Обязательно, и не обсуждается.
    2) Переустановить джаву на х64 принудительно. Обязательно, и не обсуждается. Выбрать установочник х64 можно тут.
     
    Последнее редактирование: 27 апр 2015
    MrDirty, cocount, scepsis и ещё 1-му нравится это.
  2. jadedcat

    jadedcat Guest

    Регистрация:
    Сообщения:
    0
    Симпатии:
    0
    Зарезервировано. Просьба не удалять и не закрывать тему.
     
  3. Heiwen34

    Heiwen34 Guest

    Регистрация:
    Сообщения:
    0
    Симпатии:
    0
    Почсни людям, что ВМ - вычислительная машина.
     
  4. jadedcat

    jadedcat Guest

    Регистрация:
    Сообщения:
    0
    Симпатии:
    0
    ВМ - виртуальная машина джавы (JVM). Спасибо, сейчас добавлю.
     
  5. Heiwen34

    Heiwen34 Guest

    Регистрация:
    Сообщения:
    0
    Симпатии:
    0
    Точно.....
     
    scepsis нравится это.
  6. jadedcat

    jadedcat Guest

    Регистрация:
    Сообщения:
    0
    Симпатии:
    0
    Добавил небольшой постскриптум новичкам.
     
    scepsis нравится это.

Поделиться этой страницей