Перейти к содержимому

Настройка кастомных параметров запуска IntelliJ IDEA / Android Studio

Не нашел описания всех параметров в одной статье, и написал свою, скимпилировав несколько других статьей и дополнив ответами ChatGPT 4:

Параметры можно изменить, выбрав в IntelliJ IDEA или Android Studio
Help -> Edit Custom VM Options (не путать с gradle.properties),
если их нельзя сохранить- откройте в текстовом редакторе в режиме администратора

Вот небольшое объяснение каждого:

Xms2g:
Устанавливает начальный размер кучи JVM равным 2 гигабайтам. Это минимальный размер, который будет выделен сразу после запуска JVM.

-Xmx8g:
Задаёт максимальный размер кучи JVM равным 8 гигабайтам. Это ограничение на максимальное количество памяти, которое может использовать JVM.

-XX:ReservedCodeCacheSize=2g:
Выделяет 2 гигабайта для хранения скомпилированного кода, улучшая производительность за счёт уменьшения количества компиляций Just-In-Time (JIT).

-XX:+IgnoreUnrecognizedVMOptions:
Игнорирует неизвестные параметры JVM, что позволяет избежать ошибок при запуске с параметрами, которые не поддерживаются в данной версии JVM.

-XX:+UseG1GC:
Включает сборщик мусора G1, который предназначен для оптимизации больших объёмов памяти и минимизации задержек.

-XX:SoftRefLRUPolicyMSPerMB=50:
Устанавливает время в миллисекундах, которое мягкие ссылки будут жить после последнего доступа к ним для каждого мегабайта свободной памяти в куче.

-XX:CICompilerCount=2:
Задаёт количество компиляторов Just-In-Time (JIT), что может улучшить время старта и производительность при запуске нового кода.

-XX:+HeapDumpOnOutOfMemoryError:
При возникновении ошибки из-за недостатка памяти будет создан дамп кучи.

-XX:-OmitStackTraceInFastThrow:
Отключает оптимизацию, при которой стек трассировки исключений может быть опущен для повторяющихся исключений.

-ea:
Включает проверки утверждений в JVM.

-Dsun.io.useCanonCaches=false:
Отключает кэширование канонических путей, что может улучшить поведение ввода-вывода при изменении файлов вне JVM.

-Djdk.http.auth.tunneling.disabledSchemes=””:
Разрешает использование всех схем аутентификации при туннелировании HTTP.

-Djdk.attach.allowAttachSelf=true:
Разрешает виртуальной машине Java прикреплять себя к самой себе.

-Djdk.module.illegalAccess.silent=true:
Подавляет предупреждения о нелегальном доступе к API.

-Dkotlinx.coroutines.debug=off:
Отключает отладку корутин Kotlin.

-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log:
Задаёт путь к файлу, в который будут записываться ошибки JVM.

-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof:
Указывает путь для сохранения дампа кучи при возникновении ошибки из-за недостатка памяти.\

— add-opens:
Эти параметры устраняют ограничения модульности Java, позволяя доступ к внутренним API библиотекам ASM, используемым для работы с байт-кодом.

-javaagent:C:\Program Files\JetBrains\Activate\ja-netfilter.jar=jetbrains:
Указывает на агента Java, который встраивается в процесс JVM для измен

Помимо этих параметров, которые обычно указаны по умолчанию, также можно добавить и другие

Управление памятью и сборкой мусора:

XX:NewRatio=3:
Устанавливает соотношение между молодым поколением и старым поколением кучи. Значение 3 означает, что старое поколение будет в три раза больше молодого поколения.

-XX:NewSize=512m:
Устанавливает начальный размер молодого поколения.

-XX:MaxNewSize=1g:
Устанавливает максимальный размер молодого поколения.

-XX:MaxPermSize=350m:
Устанавливает максимальный размер постоянного поколения для JVM версий до 8 (в Java 8 и выше этот параметр игнорируется из-за перемещения строк в кучу).

Настройки производительности и отладки:

XX:+DisableExplicitGC:
Запрещает системе вызывать сборку мусора явно через System.gc().

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/path/to/gc.log:
Включает детализированный лог сборки мусора, что может помочь при диагностике проблем с производительностью.

-XX:+UseFastAccessorMethods:
Включает оптимизацию вызовов простых методов (accessors).

-XX:+UseCompressedOops:
Включает использование “сжатых” указателей на объекты для уменьшения использования памяти на 64-битных JVM.

Настройки интерфейса и пользовательского опыта:

Dawt.useSystemAAFontSettings=on:
Включает сглаживание шрифтов в стиле операционной системы.

-Dswing.aatext=true:
Включает улучшенное сглаживание текста для интерфейса на базе Swing.

-Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine:
Использует Marlin как движок рендеринга 2D, что может улучшить производительность отрисовки.

Прочие опции:

Dfile.encoding=UTF-8:
Устанавливает кодировку файлов проекта в UTF-8.

-Didea.paths.selector=AndroidStudio4.0:
Задаёт папку для настроек Android Studio, плагинов и логов, позволяя иметь отдельные настройки для разных версий Android Studio.

-Didea.platform.prefix=AndroidStudio:
Указывает префикс платформы, что может быть необходимо для некоторых плагинов.

Возможные варианты Garbage Collector:

Serial GC (-XX:+UseSerialGC):
Это простейший сборщик мусора, использующий однопоточную сборку как для молодого поколения (young generation), так и для старого поколения (old generation) объектов. Этот сборщик может быть подходящим для приложений с ограниченными ресурсами и небольшим объемом данных.

Parallel GC (-XX:+UseParallelGC):
Использует множество потоков для сборки мусора в молодом поколении, что позволяет улучшить производительность при работе с большими объемами данных и высокой производительностью обработки. Это стандартный сборщик мусора для многопоточных приложений с большим объемом памяти.

Concurrent Mark Sweep (CMS) GC (-XX:+UseConcMarkSweepGC):
Предназначен для сокращения времени пауз, вызванных сборкой мусора, за счет выполнения большей части работы в фоновом режиме. Хотя CMS может быстро обрабатывать кучу и сокращать время остановки, он может потреблять больше ресурсов процессора и памяти.

Z Garbage Collector (ZGC) (-XX:+UseZGC):
Это масштабируемый сборщик мусора с низким временем остановки, предназначенный для приложений, требующих больших объемов памяти (сотни гигабайтов) и минимального влияния сборки мусора на задержку. ZGC стремится ограничить задержку до нескольких миллисекунд или менее, даже при работе с большими кучами.

Shenandoah GC (-XX:+UseShenandoahGC):
Подобно ZGC, Shenandoah стремится минимизировать время пауз во время сборки мусора, работая в основном параллельно с выполнением программы. Он разработан для уменьшения задержек при работе с большими объемами памяти.

Настроить параметры памяти для Android Studio можно во вкладке
Settings -> Appearance & Behavior -> System Settings -> Memory Settings
в IntelliJ IDEA на момент написания статьи этой настройки не было

Copyright: Roman Kryvolapov