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

Roman Kryvolapov
4 min readApr 8, 2024

Параметры можно изменить, выбрав в 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 на момент написания статьи этой настройки не было

Если вы заметили ошибку- напишите пожалуйста на:
Telegram @RomanKryvolapov или
roman.kryvolapov@gmail.com или
https://www.linkedin.com/in/roman-kryvolapov/
Статья будет дополняться и обновляться по мере наличия желания и свободного времени. Если вдруг так получилось, что эта статья оказалась для вас ценной, я не буду возражать против благодарности revolut.me/romanzjqo потому что у нее, как и у всего, что я делаю помимо работы, к сожалению нет никакой монетизации.

--

--