Андрей Смирнов
Время чтения: ~9 мин.
Просмотров: 16

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

Во многих моих тренингах так или иначе используется Java, либо как язык программирования для разработки автотестов, либо как виртуальная машина для запуска приложений, написанных на Java — инструментов тестирования, сред разработки, и даже клиент системы видеоконференций GotoWebinar требует наличия Java.

Поэтому я решил описать процедуру установки Java для операционной системы Windows и последующей настройки системы, потому что, к сожалению, недостаточно просто “запустить инсталлятор и всегда нажимать кнопку Next”.

1. Где взять Java?

На официальном сайте Oracle Java.

2. Какую версию выбрать?

Разумеется, последнюю доступную (на момент написания инструкции это Java 8).

Выбирая из 32-битной и 64-битной версий, берите 64-битную, если ваша операционная система это позволяет, потому что у неё менее строгие ограничения по памяти, доступной исполняемым Java-приложениям.

3. Что устанавливать, JRE или JDK?

Java Runtime Environment, или JRE — это виртуальная машина, позволяющая запускать приложения, написанные на языке программирования Java.

Java Development Kit, или JDK — это набор инструментов, для разработки программ на языке программирования Java (компилятор, архиватор, генератор документации и прочие). JRE разумеется тоже входит в дистрибутив JDK.

Правило очень простое: если вы собираетесь что-нибудь писать на языке программирования Java, значит вам потребуется JDK. А если только запускать готовые программы — тогда достаточно JRE.

4. Установка Java

Вот тут, действительно, всё просто — нужно запустить инсталлятор и следовать указаниям визарда. Можно просто всё время нажимать кнопку Next.

5. Настройка переменных окружения

К сожалению, инсталлятор Java не выполняет настройку переменных окружения, поэтому придётся сделать это вручную после установки.

Во-первых, необходимо установить переменную JAVA_HOME, которая должна указывать на директорию, в которую установлена Java. Многие программы используют эту переменную, чтобы определить, где находится Java.

Во-вторых, надо в переменную PATH добавить путь к директории %JAVA_HOME%bin. Эта переменная указывает операционной системе список директорий, в которых нужно искать исполняемые файлы, и чтобы можно было запускать Java из консоли, переменная PATH должна быть правильно настроена.

Для установки переменных окружения сначала нужно открыть свойства компьютера, либо использовав сочетание клавиш Win-Pause, либо через меню “Пуск”:

properties.png

Затем нужно выбрать “Дополнительные параметры системы”, в открывшемся диалоге перейти на вкладку “Дополнительно” и нажать кнопку “Переменные среды”, после чего появится диалог настройки переменных окружения.

environment.png

Если у вас уже есть переменная окружения JAVA_HOME — надо её отредактировать, если нет — создать новую. В качестве значения нужно указать путь к директории, куда установлена Java, то есть, например c:Program FilesJavajdk1.8.0_25, если вы установили JDK, либо c:Program FilesJavajre1.8.0_25, если вы установили только JRE.

После того, как вы установили значение переменной JAVA_HOME, необходимо отредактировать значение переменной PATH, добавив туда путь к директории, где находятся исполняемые файлы Java, то есть %JAVA_HOME%bin

path.png

И сохранить всё это, закрыв все открытые диалоги в обратном порядке кнопками OK.

Обратите внимание, что если вы устанавливаете JDK, то в названии директории указывается номер версии, поэтому впоследствии, когда вы решите установить более новую версию, не забудьте поменять значение переменной окружения JAVA_HOME.

После того, как вы изменили переменные окружения, новые значения будут действительны только для новых запускаемых программ, уже запущенные программы не узнают о том, что переменные окружения поменялись. Поэтому если вы, например, пытались запустить Java из консоли и у вас не получилось из-за неправильных настроек переменной PATH, вам придётся перезапустить консоль после того, как вы поменяли значение переменной.

6. Удаление лишних файлов

Запустите консоль (cmd) и выполните в ней команду where java.

В результате вы должны увидеть путь к исполняемому файлу java.exe, который операционная система должна успешно обнаружить в том месте, куда вы установили Java. Если файл не нашёлся — значит неправильно настроена переменная PATH и нужно вернуться к предыдущему пункту.

Однако иногда бывает и наоборот, находятся «лишние» исполняемые файлы:

terminal.png

Происходит это из-за того, что инсталлятор Java вместо того, чтобы правильно настроить переменные окружения, пытается положить исполняемые файлы в директорию C:Windowssystem32

Это не очень хорошо — засоряется системная директория, может возникнуть рассогласование версий Java (в разных директориях разные версии). Поэтому надо удалить из каталога C:Windowssystem32 исполняемые файлы java.exe, javaw.exe и javaws.exe, если они там обнаружатся.

Вот и всё, теперь можно пользоваться Java. Только не забывайте о том, что после установки новой версии надо будет обновить переменную окружения JAVA_HOME!

ВНИМАНИЕ!Используйте только при крайней необходимости. Не стоит страдать этой уйнёй, автору просто нечем было заняться. Приветствую тебя, странник. Если ты хоть каплю задумывался о том, как же повысить скорость работы своего сервера или клиента, ты попал в тему, которая тебе нужна. И так, приступим. Я собрал множество аргументов с описанием, которые позволяют серверу, а также клиенту работать более оптимизировано и быстрее.ВНИМАНИЕ! Для того, чтобы добиться максимальной производительности, лучше выбрать определенные аргументы, нежели вписывать все сразу. На разных версиях Java и на разном железе — аргументы ведут себя по-разному. Так что лучше после установки аргумента каждый раз перепроверять, улучшилась производительность, или нет.Пример строки запуска:Код:

java -аргумент1 -аргумент2 -аргументN server.jar

Строка запуска моего сервера:Код:

java -Xmx5G -Xmn192M -XX:+UseConcMarkSweepGC -jar server.jar

Аргументы моего клиента:Код:

-Xmn256M

Перед командой запуска сервера, добавьте эту команду:</span>Код:

taskset -c [ядра] [команда запуска]

[ядра] = 0,1,2,3 — указывать обязательно в таком формате. Выражаем благодарность </span>Основные флагиВыделение памятиСборщики мусораЭто больная тема, советую экспериментировать, чтобы добиться хоть чего-то стоящего, а не наоборот, ухудшить производительность.Экспериментальные аргументы Надеюсь, мой туториал вам пригодился

В java существует несколько областей памяти, размером каждой из которых можно управлять. Большинство лаунчеров могут регулировать только размер кучи (heap). В подробности вдаваться не буду, но эта область позволяет вместить большой объём данных не зависимо от количества переменных. Это, конечно, хорошо, но клиентам с большим количеством модов важна и еще одна область памяти — Permanent Gengeneration. Она отвечает, грубо говоря, за количество переменных, которым процесс java сможет оперировать. Именно в ней создаются все новые объекты, прежде чем переместиться в кучу (основная память). Эту область ланчеры позволяют регулировать очень и очень редко. На нашем сервере не позволяют. Итак, java позволяет оперировать размерами областей памяти (и другими параметрами ВМ) (ВМ — виртуальная машина джавы, JVM) несколькими способами, два основных из которых: — Аргументами командной строки (как это делают лаунчеры и BATники). — Специальной системной переменной _JAVA_OPTIONS О втором способе и о некоторых аргументах ВМ я и хочу сейчас рассказать. Оговорюсь сразу — я буду рассказывать, опираясь в примерах на операционную систему Windows 7, так как именно она стоит у меня на рабочем компьютере. Как устанавливать системные переменные для других ОС Вы сможете отыскать в интернете.Для того, чтобы создать системную переменную нужно: — Открыть Панель управления (Пуск — Панель управления) и выбрать меню Система. Либо, кликнув правой кнопкой мыши на Мой компьютер и выбрав Свойства. — В левой части открывшегося окна нажать Дополнительные параметры системы. — Перейти на вкладку Дополнительно и нажать Переменные среды… — В верхнем списке проверить наличие переменной _JAVA_OPTIONS, и если она есть — удалить её (выделив и нажав кнопку Удалить). — Нажать кнопку Создать… — В верхнее поле открывшегося окна (Имя переменной) писать _JAVA_OPTIONS, а в нижнее — необходимые аргументы ВМ (о них я расскажу в следующей части). — Закрыть все окна, нажав в каждом из них кнопку ОК.Yjyjhxc.pngАргументы Виртуальной Машины Java:-Xms Изначальный объем памяти кучи, который выделен ВМ. Идеальное, на мой взгляд, значение это 1024m. Больше не имеет смысла, чем больше памяти клиент откусит — тем более неповоротливым он станет. Существенное увеличение потребления памяти, вопреки ожиданию большинства игроков, только усугубит лаги.-Xmx Максимальный объем памяти кучи, доступный конкретному экземпляру ВМ. Именно этот параметр регулируется в лаунчере. Рекомендую устанавливать значение или равное предыдущему, или на 512m больше.-XXermSize (чертовы смайлики, там двоеточие и англ P) Изначальный объем памяти типов (PermGen). Очень и очень полезен для клиентов с большим количеством модов. По-умолчанию выделяется 128m для x32 систем и 256m для x64. Идеальное значение для наших клиентов — 512m. Слишком большое значение выставлять не рекомендую.-XX:MaxPermSize Максимальный объем памяти типов. Крайне рекомендую устанавливать такой же объем, как и для прошлого аргумента.Внимание! Если у вас установлена Java 8, по последние 2 аргумента (-XXermSize и -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 строки «-XXermSize=512m -XX:MaxPermSize=512m» не будут иметь ни какого смысла.Не бойтесь экспериментировать с аргументами, ни чего страшного с их помощью вы не сможете сделать, однако при их тонкой подгонке под свой компьютер можно получить очень большой прирост ФПС.Об ошибках. Иногда (всех причин я понять не смог) при таком указании аргументов ВМ некоторые процессы java (в том числе клиент и лаунчер) перестают работать. Выводится соответствующее сообщение вместо запуска ланчера (или другого приложения). В некоторых случаях это может быть вызвано некорректными аргументами. Попробуйте еще поэкспериментировать с ними. В некоторых случаях не запускаются только некоторые java приложения (например, Zona), в то время, как клиент майнкрафта очень хорошо работает. В таких случаях можно временно отключать настройку аргументов, переименовав _JAVA_OPTIONS, к примеру, в ex_JAVA_OPTIONS. Java сразу перестанет подхватывать такие инструкции. В некоторых, очень редких, случаях сама инструкция _JAVA_OPTIONS (даже с самыми безопасными аргументами) приводит к полной неработоспособности Java. В таких случаях я могу посоветовать только переустановку Java (именно сказать установочник с сайте java.com) и Windows. Некоторым помогает, но не всегда. Был случай, когда ни какими способами я так и не заставил работать эту инструкцию у друга.Любые вопросы и уточнения (кроме глупых) приветствуются.PS:PPS: Еще пара небольших советов, раз уж я всех посылаю сюда: 1) Переустановить Windows на версию х64. Обязательно, и не обсуждается. 2) Переустановить джаву на х64 принудительно. Обязательно, и не обсуждается. Выбрать установочник х64 можно тут.

Используемые источники:

  • http://barancev.github.io/how-to-install-java-on-windows/
  • http://rubukkit.org/threads/uskorenie-raboty-java-argumenty.111538/
  • https://sky-mine.ru/forum/threads/prinuditelnoe-vydelenie-pamjati-processu-java.1524/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации