← Назад к вопросам
Какие параметры командной строки можно передавать JVM при запуске Java приложения
1.7 Middle🔥 161 комментариев
#Основы Java
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Параметры командной строки JVM при запуске Java приложения
JVM поддерживает множество параметров для настройки памяти, производительности, отладки и поведения приложения. Понимание этих параметров критично для оптимизации production систем.
1. Основные параметры памяти
Heap память:
# Устанавливаем минимальный и максимальный размер heap
java -Xms512m -Xmx2g MyApplication
# Xms = начальный размер heap (минимум)
# Xmx = максимальный размер heap
# Хорошая практика: Xms == Xmx для production
java -Xms2g -Xmx2g MyApplication
Метаспейс (для метаданных классов):
# Java 8+: вместо PermGen используется Metaspace
java -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m MyApplication
# Это важно при динамической загрузке классов
Stack память:
# Размер стека для каждого потока
java -Xss1m MyApplication # 1 мегабайт на поток
# По умолчанию 1MB, может быть важно при большом числе потоков
2. Garbage Collection параметры
Выбор GC алгоритма:
# G1GC (по умолчанию в Java 11+)
java -XX:+UseG1GC MyApplication
# ZGC (low-latency, Java 11+)
java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC MyApplication
# Parallel GC (хорошо для batch processing)
java -XX:+UseParallelGC MyApplication
# Serial GC (только для простых приложений)
java -XX:+UseSerialGC MyApplication
Настройка GC поведения:
# Максимальное время паузы (G1GC)
java -XX:+UseG1GC -XX:MaxGCPauseMillis=200 MyApplication
# Процент heap для young generation
java -XX:NewRatio=2 MyApplication # Young = 1/3 heap, Old = 2/3
# Параллелизм сборки мусора
java -XX:ParallelGCThreads=8 MyApplication
3. Мониторинг и отладка
Логирование GC:
# Java 9+
java -Xlog:gc:file=gc.log MyApplication
java -Xlog:gc*:file=gc.log:level=info:uptime,level,tags MyApplication
# Java 8
java -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:gc.log MyApplication
Мониторинг JVM:
# Включить удалённый мониторинг (JMX)
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9010 \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
MyApplication
Профилирование:
# Вывести информацию о потоках при выходе
java -XX:+PrintCompilation MyApplication
# Флаг для профилирования
java -prof MyApplication
4. System Properties
Передача системных параметров:
# Параметры из командной строки (-D флаг)
java -Dapp.name=MyApp -Dapp.version=1.0 MyApplication
# В коде Java
String appName = System.getProperty("app.name"); // "MyApp"
String version = System.getProperty("app.version"); // "1.0"
Стандартные системные свойства:
public class SystemPropertiesExample {
public static void printSystemProperties() {
System.out.println("Java версия: " +
System.getProperty("java.version"));
System.out.println("User dir: " +
System.getProperty("user.dir"));
System.out.println("OS name: " +
System.getProperty("os.name"));
System.out.println("Java home: " +
System.getProperty("java.home"));
}
}
5. Параметры компиляции
JIT компиляция:
# Уровень оптимизации (-XX:TieredStopAtLevel=4)
java -XX:+TieredCompilation \
-XX:TieredStopAtLevel=4 \
MyApplication
# Отключить JIT (только интерпретация)
java -Xint MyApplication
# Только компиляция (опасно на старте)
java -Xcomp MyApplication
Кэширование:
# Application Class Data Sharing (Java 10+)
java -Xshare:auto MyApplication
# Может улучшить скорость старта приложения
6. Параметры производительности
Оптимизации:
# Aggressive optimization
java -XX:+AggressiveOpts MyApplication
# Biased locking (по умолчанию on)
java -XX:+UseBiasedLocking MyApplication
# String deduplication (G1GC)
java -XX:+UseG1GC -XX:+UseStringDeduplication MyApplication
# Escape analysis (позволяет JVM оптимизировать allocations)
java -XX:+DoEscapeAnalysis MyApplication
7. Параметры безопасности
SecurityManager и permissions:
# Использовать security manager
java -Djava.security.manager=default MyApplication
# Файл с правами доступа
java -Djava.security.policy=file:/path/to/policy.txt MyApplication
Управление модулями (Java 9+):
# Экспортировать внутренние API
java --add-exports java.base/sun.nio.ch=ALL-UNNAMED MyApplication
# Разрешить доступ к internal классам
java --illegal-access=permit MyApplication
8. Параметры отладки и диагностики
Remote Debugging:
# Включить remote debugging на порту 5005
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 MyApplication
# suspend=y - ждёт подключения debugger'а перед стартом
# suspend=n - стартует сразу
Dump информация о приложении:
# Dump при OutOfMemoryError
java -XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/tmp/heapdump.hprof \
MyApplication
# Dump при выходе
java -XX:+PrintClassHistogram MyApplication
9. Практический пример: Production конфигурация
#!/bin/bash
# Стандартная production конфигурация для web сервера
java \
-server \
-Xms4g \
-Xmx4g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+ParallelRefProcEnabled \
-XX:+UnlockDiagnosticVMOptions \
-XX:G1SummarizeRSetStatsPeriod=1 \
-XX:+PrintGCDetails \
-XX:+PrintGCTimeStamps \
-Xloggc:logs/gc.log \
-XX:+UseStringDeduplication \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9010 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dapp.name=MyService \
-Dapp.version=1.0 \
-jar myapp.jar
10. Параметры для микросервисов / контейнеров
# Контейнер-aware параметры (Java 10+)
java -XX:+UnlockExperimentalVMOptions \
-XX:+UseCGroupMemoryLimitForHeap \
MyApplication
# Явная настройка для Docker
java -XX:InitialHeapSize=512m \
-XX:MaxHeapSize=512m \
MyApplication
# Java 15+: более современный способ
java -XX:+UseContainerSupport \
-XX:MaxRAMPercentage=50.0 \
MyApplication
11. Чек-лист параметров JVM
✓ Память: -Xms, -Xmx (должны быть равны в production)
✓ GC: выбрать подходящий алгоритм (G1GC для большинства)
✓ Лог GC: -Xlog:gc или -XX:+PrintGCDetails для отладки
✓ Мониторинг: включить JMX для production
✓ Отладка: -agentlib:jdwp для development
✓ Properties: -D для конфигурации приложения
✓ Security: -Djava.security.manager если нужно
✓ Производительность: включить доступные оптимизации
12. Как узнать текущие параметры JVM
# Вывести все JVM параметры
java -XshowSettings:all -version
# Вывести только VM параметры
java -XshowSettings:vm -version
# В Java коде
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMXBean.getInputArguments();
arguments.forEach(System.out::println);
Правильная настройка параметров JVM может значительно улучшить производительность, надёжность и масштабируемость приложения.