---
title: "Настройка на потребителски параметри за стартиране на IntelliJ IDEA / Android Studio"
url: "https://romankryvolapov.com/bg/intellij-idea-launch-options/"
description: "Какво прави всеки флаг в Edit Custom VM Options: размери на heap, избор на Garbage Collector, кеш на кода и настройка на паметта в Android Studio."
language: bg
published: 2024-04-08
updated: 2026-11-13
---
Параметрите могат да се променят, като в IntelliJ IDEA или Android Studio изберете \
Help -> Edit Custom VM Options (да не се бърка с gradle.properties), \
ако не могат да се запазят – отворете файла в текстов редактор в режим на администратор

## Основни параметри на JVM

**Ето кратко обяснение на всеки от тях:**

**Xms2g:** \
Задава началния размер на heap-а на JVM да е 2 гигабайта. Това е минималният размер, който ще бъде заделен веднага след стартирането на JVM.

**-Xmx8g:** \
Задава максималния размер на heap-а на JVM да е 8 гигабайта. Това е ограничение за максималното количество памет, което JVM може да използва.

**-XX:ReservedCodeCacheSize=2g:** \
Заделя 2 гигабайта за съхранение на компилирания код, като подобрява производителността чрез намаляване на броя на Just-In-Time (JIT) компилациите.

**-XX:+IgnoreUnrecognizedVMOptions:** \
Игнорира непознатите параметри на JVM, което позволява да се избегнат грешки при стартиране с параметри, които не се поддържат в дадената версия на JVM.

**-XX:+UseG1GC:** \
Включва garbage collector-а G1, който е предназначен за оптимизация при големи обеми памет и за минимизиране на закъсненията.

**-XX:SoftRefLRUPolicyMSPerMB=50:** \
Задава времето в милисекунди, през което меките референции (soft references) ще живеят след последния достъп до тях, за всеки мегабайт свободна памет в heap-а.

**-XX:CICompilerCount=2:** \
Задава броя на Just-In-Time (JIT) компилаторите, което може да подобри времето за стартиране и производителността при изпълнение на нов код.

**-XX:+HeapDumpOnOutOfMemoryError:** \
При възникване на грешка поради недостиг на памет ще бъде създаден дъмп на heap-а.

**-XX:-OmitStackTraceInFastThrow:** \
Изключва оптимизацията, при която стекът на трасиране (stack trace) на изключенията може да бъде пропуснат при повтарящи се изключения.

**-ea:** \
Включва проверките на твърденията (assertions) в 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:** \
Указва пътя за запазване на дъмпа на heap-а при възникване на грешка поради недостиг на памет.\\

**--add-opens:** \
Тези параметри премахват ограниченията на модулността на Java, като позволяват на библиотеките ASM, използвани за работа с байткод, достъп до вътрешни API.

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

## Управление на паметта и събиране на боклука

Освен тези параметри, които обикновено са зададени по подразбиране, могат да се добавят и други

**XX:NewRatio=3:** \
Задава съотношението между младото и старото поколение на heap-а. Стойност 3 означава, че старото поколение ще е три пъти по-голямо от младото.

**-XX:NewSize=512m:** \
Задава началния размер на младото поколение.

**-XX:MaxNewSize=1g:** \
Задава максималния размер на младото поколение.

**-XX:MaxPermSize=350m:** \
Задава максималния размер на постоянното поколение (permanent generation) за версиите на JVM до 8 (в Java 8 и по-нови този параметър се игнорира, тъй като низовете са преместени в heap-а).

## Настройки за производителност и дебъгване

**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):** \
Това е най-простият garbage collector, който използва еднонишково събиране както за младото поколение (young generation), така и за старото поколение (old generation) обекти. Този garbage collector може да е подходящ за приложения с ограничени ресурси и малък обем данни.

**Parallel GC (-XX:+UseParallelGC):** \
Използва множество нишки за събиране на боклука в младото поколение, което позволява да се подобри производителността при работа с големи обеми данни и висока производителност на обработката. Това е стандартният garbage collector за многонишкови приложения с голям обем памет.

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

**Z Garbage Collector (ZGC) (-XX:+UseZGC):** \
Това е мащабируем garbage collector с ниско време на спиране, предназначен за приложения, които изискват големи обеми памет (стотици гигабайти) и минимално влияние на събирането на боклука върху закъснението. ZGC се стреми да ограничи закъснението до няколко милисекунди или по-малко, дори при работа с големи heap-ове.

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

## Настройка на паметта в Android Studio

Параметрите на паметта за Android Studio могат да се настроят в раздела \
Settings -> Appearance & Behavior -> System Settings -> Memory Settings\
в IntelliJ IDEA към момента на писане на статията тази настройка я нямаше

[ Copyright: Roman Kryvolapov ](https://t.me/RomanKryvolapov)
