Перейти к содержимому

Generational ZGC в Java 21: объяснение | G1GC vs ZGC vs Generational ZGC (анализ JFR)

LearningFromExperience

0:00 / 0:00

Generational ZGC в Java 21: объяснение | G1GC vs ZGC vs Generational ZGC (анализ JFR)

226 просмотров · 2 месяца назад
LearningFromExperience
4,24 тыс. подписчиков
226 просмотров · 2 месяца назад
Генерационная сборка мусора (ZGC) меняет подход ZGC к обработке кратковременных и долгоживущих объектов — но чем она отличается от G1GC и классической ZGC? В этом подробном обзоре Java 21 мы сначала создадим концептуальную модель, лежащую в основе генерационной ZGC. Затем мы запустим одну и ту же рабочую нагрузку Spring Boot для розничной торговли, используя G1GC, негенерационную ZGC и генерационную ZGC. Вы увидите, чем отличаются сборщики мусора по архитектуре, активности сборщика мусора, поведению при паузах, обработке выделения памяти и их влиянию на работающее приложение. Что вы узнаете: • Что такое ZGC с генерацией поколений и почему он был введен • Поведение объектов молодого и старого поколений • Ограничения первоначальной конструкции ZGC с одной генерацией • G1GC против ZGC без генерации против ZGC с генерацией поколений • Как имитировать давление выделения памяти при реалистичной рабочей нагрузке розничной торговли • Как читать и интерпретировать журналы сборщика мусора • Как анализировать данные Java Flight Recorder с помощью JDK Mission Control • Почему большее количество событий сборщика мусора не означает автоматически худшую производительность приложения • Как задержка, пропускная способность, размер кучи и поведение рабочей нагрузки влияют на выбор сборщика мусора 📋 Разделы: 0:00 Введение и что такое ZGC с генерацией поколений 1:37 Обзор эксперимента — 3 сборщика мусора, 2 размера кучи 3:30 Ключевые понятия: паузы сборщика мусора, задержки выделения памяти, циклы сборщика мусора 7:52 Структура кучи: молодое поколение, старое поколение и гипотеза о генерации 12:33 Как работает ZGC: маркировка и Фазы перемещения памяти 16:08 Что изменилось в Java 21: ZGC с поколенческим распределением памяти 18:55 Сравнение трех сборщиков мусора 21:15 Объяснение флагов JVM 22:30 RetailMemoryStress.java — разбор кода 27:15 Запуск эксперимента (Фаза 1: куча 1 ГБ) 30:45 Анализ логов сборщика мусора 1 ГБ и результатов JFR 35:15 Сводка результатов для 1 ГБ и гистограмма 37:30 Запуск Фазы 2: куча 512 МБ 38:45 Анализ логов сборщика мусора 512 МБ и результатов JFR 42:20 Результаты для 512 МБ: сравнение задержек при выделении памяти 43:30 Заключительное резюме и выводы Параметры JVM, использованные в демонстрации: G1GC: -XX:+UseG1GC ZGC без поколенческого распределения памяти: -XX:+UseZGC -XX:-ZGenerational Generational ZGC: -XX:+UseZGC -XX:+ZGenerational 🎓 Углубленный анализ возможностей Java 21: виртуальные потоки и Spring Boot https://www.udemy.com/course/java-21-... 💻 Исходный код https://github.com/j2eeexpert2015/jav... 📚 Изучите все курсы https://j2eeexpert2015.github.io/lear... #Java21 #ZGC #JVMPerformance