[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-jvm-osnovnye-parametry-jvm-dlya-nastroyki-pamyati":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":19,"progress":20,"seo":21},1217,"osnovnye-parametry-jvm-dlya-nastroyki-pamyati",38,"jvm","JVM","⚙️","Основные параметры JVM для настройки памяти","Параметры JVM — это флаги командной строки, управляющие размерами памяти, выбором сборщика мусора и диагностикой. Правильная настройка критична для стабильной работы приложения в production.\n\n### Параметры размера памяти\n\n| Параметр | Описание | Пример |\n|---|---|---|\n| `-Xms` | Начальный размер heap | `-Xms512m` |\n| `-Xmx` | Максимальный размер heap | `-Xmx4g` |\n| `-Xss` | Размер стека потока | `-Xss512k` |\n| `-Xmn` | Размер Young Generation | `-Xmn256m` |\n| `-XX:MaxMetaspaceSize` | Максимальный размер Metaspace | `-XX:MaxMetaspaceSize=512m` |\n| `-XX:MetaspaceSize` | Порог для первого GC Metaspace | `-XX:MetaspaceSize=256m` |\n\n### Параметры соотношений\n\n| Параметр | Описание | По умолчанию |\n|---|---|---|\n| `-XX:NewRatio` | Соотношение Old\u002FYoung | 2 (Young = 1\u002F3 heap) |\n| `-XX:SurvivorRatio` | Соотношение Eden\u002FSurvivor | 8 (S = 1\u002F10 Young) |\n| `-XX:MaxTenuringThreshold` | Возраст для продвижения в Old | 15 |\n\n### Параметры выбора GC\n\n```bash\n-XX:+UseSerialGC          # Serial GC\n-XX:+UseParallelGC         # Parallel (Throughput) GC\n-XX:+UseG1GC               # G1 GC (по умолчанию с Java 9)\n-XX:+UseZGC                # ZGC\n-XX:+UseShenandoahGC       # Shenandoah\n-XX:+UseEpsilonGC          # Epsilon (no-op) GC\n```\n\n### Параметры диагностики\n\n\u003Cdetails>\n\u003Csummary>Логирование GC и heap dump\u003C\u002Fsummary>\n\n```bash\n# Логирование GC (Java 9+, Unified Logging)\n-Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=5,filesize=100m\n\n# Heap dump при OutOfMemoryError\n-XX:+HeapDumpOnOutOfMemoryError\n-XX:HeapDumpPath=\u002Fvar\u002Fdumps\u002F\n\n# Показать финальные значения всех флагов\n-XX:+PrintFlagsFinal\n\n# Native Memory Tracking\n-XX:NativeMemoryTracking=summary\n```\n\n\u003C\u002Fdetails>\n\n### Параметры для контейнеров (Docker\u002FKubernetes)\n\n```bash\n# Использовать проценты от лимита контейнера (по умолчанию с Java 10+)\n-XX:+UseContainerSupport\n\n# Установить heap как процент от доступной памяти\n-XX:MaxRAMPercentage=75.0\n-XX:InitialRAMPercentage=50.0\n-XX:MinRAMPercentage=25.0   # используется для маленьких heap\n```\n\n\u003Cdetails>\n\u003Csummary>Типичная конфигурация для production\u003C\u002Fsummary>\n\n```bash\njava \\\n  -Xms4g -Xmx4g \\\n  -XX:+UseG1GC \\\n  -XX:MaxGCPauseMillis=200 \\\n  -XX:+UseStringDeduplication \\\n  -XX:MaxMetaspaceSize=512m \\\n  -XX:+HeapDumpOnOutOfMemoryError \\\n  -XX:HeapDumpPath=\u002Fvar\u002Fdumps\u002F \\\n  -Xlog:gc*:file=\u002Fvar\u002Flog\u002Fgc.log:time,uptime,level,tags:filecount=5,filesize=100m \\\n  -jar application.jar\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>Типичная конфигурация для контейнера\u003C\u002Fsummary>\n\n```bash\njava \\\n  -XX:+UseContainerSupport \\\n  -XX:MaxRAMPercentage=75.0 \\\n  -XX:+UseZGC \\\n  -XX:+HeapDumpOnOutOfMemoryError \\\n  -XX:HeapDumpPath=\u002Ftmp\u002F \\\n  -Xlog:gc*:file=\u002Fvar\u002Flog\u002Fgc.log:time,uptime,level,tags \\\n  -jar application.jar\n```\n\n\u003C\u002Fdetails>\n\n### Частые ошибки\n\n- `-Xms` намного меньше `-Xmx` — JVM тратит время на расширение heap под нагрузкой\n- Не установлен `-XX:MaxMetaspaceSize` — утечка загрузчиков классов может потребить всю память ОС\n- В контейнере задан `-Xmx` больше лимита контейнера — OOM Killer убивает процесс\n- Использование `-XX:MaxRAMPercentage=100` — не остаётся памяти для Metaspace, native memory, thread stacks\n- Копирование production-конфигурации для локальной разработки — избыточное потребление ресурсов\n\n> **На собеседовании:** обязательно упомяните правило `-Xms` = `-Xmx` в production и `-XX:+HeapDumpOnOutOfMemoryError`. Для контейнеров покажите знание `-XX:MaxRAMPercentage` вместо фиксированного `-Xmx`. Частая ловушка — вопрос, почему нельзя ставить `MaxRAMPercentage=100` (ответ: нужна память для Metaspace, native memory, стеки потоков).","","middle",[7,15,16,17,18],"kubernetes","memory","performance","configuration",[],null,{"title":22,"description":23,"ogTitle":24,"ogDescription":25,"keywords":26,"schemaAnswer":36,"featuredSnippetReady":37},"Основные параметры JVM для настройки памяти — Gymterview","Параметры JVM: -Xms, -Xmx, -Xss, MaxMetaspaceSize, MaxRAMPercentage. Конфигурация для production и Docker\u002FKubernetes. HeapDumpOnOutOfMemoryError и GC-логи.","Параметры JVM для настройки памяти — Gymterview","Полный обзор JVM-параметров: размеры памяти, GC, диагностика. Типичные конфигурации для production и контейнеров.",[27,28,29,30,31,32,33,34,8,35],"параметры JVM","Xms","Xmx","MaxRAMPercentage","HeapDumpOnOutOfMemoryError","Docker","Kubernetes","память","собеседование","Ключевые параметры: -Xms\u002F-Xmx (начальный\u002Fмаксимальный heap, в production делать равными), -Xss (стек потока), -XX:MaxMetaspaceSize. Для контейнеров: -XX:MaxRAMPercentage=75.0 вместо фиксированного -Xmx. Обязательно в production: -XX:+HeapDumpOnOutOfMemoryError и GC-логи (-Xlog:gc*). Нельзя ставить MaxRAMPercentage=100 — нужна память для Metaspace и native memory.",true]