Налаштування кастомних параметрів запуску IntelliJ IDEA / Android Studio
Параметри можна змінити, вибравши в IntelliJ IDEA або Android Studio
Help -> Edit Custom VM Options (не плутати з gradle.properties),
якщо їх не можна зберегти- відкрийте в текстовому редакторі в режимі адміністратора
Основні параметри JVM
Ось невелике пояснення кожного:
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
Налаштувати параметри пам'яті для Android Studio можна у вкладці
Settings -> Appearance & Behavior -> System Settings -> Memory Settings
в IntelliJ IDEA на момент написання статті цього налаштування не було