Настройка кастомных параметров запуска IntelliJ IDEA / Android Studio
Параметры можно изменить, выбрав в 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 потому что у нее, как и у всего, что я делаю помимо работы, к сожалению нет никакой монетизации.