Разбираемые темы:
Модуль 1. Обзор тюнинга производительности – 5 ч.
Общие практики;
Стратегии тюнинга производительности;
Метрики производительности;
Как повысить производительность?
Инструменты для измерения производительности;
JMeter;
Нагрузочное тестирование с помощью JMeter;
Как повысить производительность с помощью архитектуры?
Лучшие практики для улучшения производительности кода.
Домашняя работа – 2 ч.
Модуль 2. Алгоритмы GC – 5 ч.
Использование памяти Java-объектами;
Общие подходы и алгоритмы сборщиков мусора;
Сборщик мусора Serial GC;
Сборщик мусора Parallel GC;
Сборщик мусора CMS;
Сборщик мусора G1;
Сборщик мусора Shenandoah;
Тюнинг сборщиков мусора;
Инструменты сбора и анализа метрик о сборке мусора;
Выбор оптимального сборщика мусора.
Модуль 3. JIT-компилятор HotSpot – 5 ч.
JIT компиляция;
Java байт-код;
Многослойная компиляция;
Кэш кода и его тюнинг;
Оптимизация кода;
Деоптимизация кода и когда она происходит;
Инструмент JITWatch для анализа результатов компиляции;
Виды оптимизаций;
Спекулятивные оптимизации;
Настройка компилятора;
AOT компиляция.
Домашняя работа – 2 ч.
Модуль 4. Флаги JVM – 3 ч.
Назначение и категории флагов JVM;
Общие флаги;
Флаги, связанные со строками;
Флаги управления памятью;
Safepoints и флаги, связанные с ними;
TLAB и флаги, связанные с ними;
План тюнинга JVM.
Модуль 5. Тестирование производительности алгоритмов (benchmarking) с помощью JMH – 2 ч.
Что такое benchmarking;
Знакомство с JMH;
API JMH;
Нетривиальные примеры;
Применение JMH на практике.
Домашняя работа – 2 ч.
Модуль 6. Использование памяти вне кучи (off-heap memory) – 3 ч.
Что такое sun.misc.Unsafe;
Методы Unsafe;
Производительность нативной памяти;
Создание структур данных в нативной памяти;
Оценка производительности нативной памяти и сравнение с памятью в куче;
Перспективный Foreign Memory Access API.
Модуль 7. Сериализация – 2 ч.
Сериализаторы JSON (GSON, Jackson);
Двоичные сериализаторы (Protobuf, Jackson Smile, Kryo, FST, One NIO);
Сравнение производительности различных сериализаторов.
Модуль 8. Профилирование Java – 4 ч.
Когда и как делать профилирование?
Сэмплирующие и инструментирующие профайлеры;
Использование Java VisualVM для профилирования;
Профилирование с помощью Spring AOP;
Профилирование с помощью IDEA и async profiler;
Java Flight Recorder;
Анализ логов Java Flight Recorder с помощью Mission Conrol;
Создание и логгирование кастомных событий JFR;
Использование Java агентов для внедрения в код и записи любых событий в Java Flight Recorder;
Написание программ для автоматического анализа логов JFR;
Сбор и анализ SQL запросов с помощью JFR;
Сбор и анализ REST запросов с помощью JFR.
Домашняя работа – 2 ч.
Модуль 9. Мониторинг и анализ данных кучи. Утечки памяти – 2 ч.
Инструменты для анализа данных в памяти;
Признаки утечек памяти;
Основные причины утечек памяти;
Поиск и обнаружение утечек памяти.
Модуль 10. GraalVM – 3 ч.
Экосистема GraalVM;
Среда выполнения GraalVM;
Polyglot API;
Компиляция и родной образ;
Контрольные показатели.
Модуль 11. Кэширование в приложениях Java – 3 ч.
Шаблоны кеширования;
Сравнение API кешей;
Кеширование запросов БД;
Кеширование HTTP запросов;
Основные метрики и настройки библиотек кеширования;
Сравнение популярных библиотек кеширования;
Кеширование сервисного уровня;
Кеширование Spring сервисов;
Приложения, использующие кеши разных уровней.
Модуль 12. Обзор других подходов к повышению производительности – 3 ч.
Параллельное программирование (пулы потоков, параллельные потоки, структура fork-join);
Асинхронное программирование;
Реактивное программирование (Reactor, VertX);
Оптимизация работы с базами данных;
Облачные вычисления (микросервисы, Spring Cloud);
Контрольные показатели и выводы.