Флаги настройки сборки мусора и профилирование в JVisualVM
Задавайте параметры размера кучи, включайте журналирование сборки мусора и используйте JVisualVM для профилирования использования кучи в работающем приложении.
«Флаги настройки сборки мусора и профилирование в JVisualVM» — бесплатный урок Java Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Зачем настраивать GC
Настройки GC по умолчанию хорошо подходят для многих приложений, но рабочим нагрузкам с высокой пропускной способностью или низкой задержкой может потребоваться настройка. Сначала измерьте показатели — никогда не настраивайте вслепую.
Флаги размера кучи
Задайте начальный (-Xms) и максимальный (-Xmx) размеры кучи. В рабочей среде задайте им одинаковые значения, чтобы предотвратить паузы из-за динамического изменения размера. Начните с 60–70% доступной RAM.
// Example production flags:
java -Xms2g -Xmx2g -XX:+UseG1GC MyApp
// Avoid:
java -Xmx8g MyApp // initial = 256m, max = 8g → resizing pausesРазмер молодого поколения
Увеличьте размер молодого поколения для приложений с большим количеством распределений памяти, чтобы снизить частоту малых циклов GC. Используйте -Xmn или -XX:NewRatio (соотношение Old:Young, по умолчанию — 2).
// Set Young Gen to 1 GB:
java -Xmx4g -Xmn1g MyApp
// Or via ratio:
java -Xmx4g -XX:NewRatio=3 MyApp // 3GB old, 1GB youngЦелевое время паузы G1
Задайте -XX:MaxGCPauseMillis, чтобы указать G1 желаемую максимальную длительность паузы. G1 настраивает набор объектов для сборки, чтобы достичь цели, но это ориентир, а не жёсткая гарантия.
java -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xmx8g MyApp
// G1 will try to keep pauses under 100 msКоличество потоков GC
Управляйте параллелизмом с помощью -XX:ParallelGCThreads (потоки для остановки мира) и -XX:ConcGCThreads (параллельные потоки для G1/ZGC).
// On an 8-core machine:
java -XX:+UseG1GC -XX:ParallelGCThreads=8 -XX:ConcGCThreads=2 MyAppВключение журналирования GC (JVM 9+)
Используйте платформу Xlog для записи событий GC. Анализируйте журналы автономно, чтобы обнаружить длительные паузы, всплески распределений памяти и сбои продвижения объектов.
java -Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=5,filesize=20m MyAppПредупреждение о гигантских объектах
Объекты, размер которых превышает 50% региона G1, считаются «гигантскими» и минуют молодое поколение, сразу попадая в старое поколение. Это может привести к фрагментации. Уменьшайте размер крупных объектов или увеличивайте размер региона.
// Increase G1 region size (range: 1 MB to 32 MB, must be power of 2):
java -XX:+UseG1GC -XX:G1HeapRegionSize=16m -Xmx16g MyAppОбзор JVisualVM
JVisualVM (входит в состав JDK 8, а для более новых версий JDK доступен для скачивания) предоставляет GUI для мониторинга кучи, GC, CPU и потоков локальных и удалённых процессов JVM.
Подключение к удалённой JVM
Включите JMX на сервере, чтобы подключаться к нему из JVisualVM. Добавьте эти флаги при запуске целевой JVM.
// Remote JVM flags:
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9090 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
MyAppДамп кучи из JVisualVM
В JVisualVM щёлкните процесс правой кнопкой мыши → «Дамп кучи». Дамп показывает живые объекты, удерживаемые размеры и ссылки. Используйте «Консоль OQL», чтобы запрашивать данные дампа с помощью синтаксиса, похожего на SQL.
Профилирование CPU с помощью JVisualVM
Перейдите на вкладку «Профилировщик» и нажмите «CPU». JVisualVM инструментирует методы и показывает горячие стеки вызовов. Остановите профилировщик, чтобы узнать, какие методы использовали больше всего времени.
Java Flight Recorder и JVisualVM
JFR создаёт меньшие накладные расходы (около 1–2%) и подходит для рабочей среды. Профилирование с помощью JVisualVM создаёт большие накладные расходы и лучше подходит для разработки. Используйте JFR в рабочей среде, а JVisualVM — для отладки во время разработки.
Быстрая проверка
Какой флаг задаёт целевую максимальную паузу GC для G1?
Итоги
В рабочей среде задавайте -Xms == -Xmx. Настраивайте -XX:MaxGCPauseMillis для G1. Включайте журналирование GC с помощью Xlog. Используйте JVisualVM для отладки во время разработки, а JFR — для профилирования в рабочей среде.
Часто задаваемые вопросы
Урок «Флаги настройки сборки мусора и профилирование в JVisualVM» бесплатный?
Да — полный текст урока «Флаги настройки сборки мусора и профилирование в JVisualVM» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Флаги настройки сборки мусора и профилирование в JVisualVM»?
Задавайте параметры размера кучи, включайте журналирование сборки мусора и используйте JVisualVM для профилирования использования кучи в работающем приложении. Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Флаги настройки сборки мусора и профилирование в JVisualVM»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Области кучи JVM и жизненный цикл объектов
- Алгоритмы сборки мусора: Serial, G1, ZGC и Shenandoah
- Обнаружение и устранение утечек памяти
- Флаги настройки сборки мусора и профилирование в JVisualVM