Не нашел описания всех параметров в одной статье, и написал свою, скимпилировав несколько других статьей и дополнив ответами 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 на момент написания статьи этой настройки не было