0Pricing
Java Academy · Урок

Флаги настройки сборки мусора и профилирование в 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 — локальная установка не требуется.

Все уроки этого курса

  1. Области кучи JVM и жизненный цикл объектов
  2. Алгоритмы сборки мусора: Serial, G1, ZGC и Shenandoah
  3. Обнаружение и устранение утечек памяти
  4. Флаги настройки сборки мусора и профилирование в JVisualVM
← Назад к Java Academy