О чём курс
Курс посвящен повышению производительности Java-приложений. В курсе рассматриваются различные подходы к профилированию, поиску узких мест, тюнингу виртуальной машины, настройки флагов JVM, библиотеки сериализации и кэширования, хранение данных вне кучи, бенчмаркинг, мониторинг и настройка памяти, и другие темы.
Цели
Познакомить слушателей с современными подходами к повышению производительности Java приложений.
Целевая аудитория
Разработчики Java, архитекторы Java.
Предварительная подготовка
Для успешного прохождения курса участникам потребуется:
Опыт разработки на Java от 2 лет.
Базовое понимание принципов работы JVM.
Опыт работы с многопоточностью и знание основных структур данных в Java.
Желателен опыт работы с Spring Boot и Spring Data / JPA
Для кого
Разработчик
Улучшаемые навыки
JVM Performance
Garbage Collection (GC)
JIT Compilation
Java Memory Management
Benchmarking with JMH
Unsafe API
Memory Optimization
High-Performance Java
Queuing Theory
JVM Configuration Flags
Инструменты
JMeter
Java
Расписание курсов
Программа курса
01
Методологический подход
Что стоит за понятием performance?
Базовые понятия
Психологические аспекты восприятия
Теория массового обслуживания (Queuing Theory)
Категории тестовых метрик
Влияющие факторы
Разновидности диагностических тестов
Рекомендуемые приемы
Практика: CPU cache-lines, избыточное логгирование, JMeter
Управление памятью
Основы сборки мусора
Настройка сборщиков мусора
Серийный сборщик мусора
Параллельный сборщик мусора
Garbage First GC
Shenandoah GC
ZGC
Epsilon GC
Сбор метрик СМ
Подбор сборщика мусора
Практика: переключение с одного GC на другой, JOL-анализ
03
JIT-компилятор HotSpot
Компиляция Java-кода и исполнение программы
JIT-компиляция HotSpot
Оптимизации
Обобщение
Практика: работа с javap, работа с JITWatch
Цели использования и категории флагов JVM
Распространенные флаги JVM
Флаги JVM, относящиеся к строке
Флаги JVM для JIT-компилятора
Общие флаги JVM для сборщиков мусора
Флаги JVM для журнала процесса сборки мусора
Сбор статистики по точкам безопасного состояния
Флаги JVM для настройки управления памятью
План настройки JVM
Практика: анализ размера пула стрингов, TLAB, safepoints
05
Сопоставительный анализ (бенчмаркинг) Java с помощью JMH
Что такое бенчмаркинг?
Категории бенчмаркинга
Введение в JMH
API JMH
Рекомендации по работе с JMH
Обобщение
Практика: применение фреймворка JMH + домашнее задание
06
Нединамическая память и эффективные структуры данных
Класс Unsafe: API низкого уровня
Демонстрации
Эффективные структуры данных
Foreign Function and Memory API
Практика: работа с Unsafe, FFMA
Когда и как профилировать?
Сэмплинг и инструментация
JVisualVM и профилирования
Профилирование со Spring AOP
Профилирование в IDEA
Java Flight Recorder
Анализ JFR-логов с помощью JMC
Кастомизация логгирования в JFR
Использование Java агентов c JFR
Программный анализ логов JFR;
Сбор SQL- и REST-запросов в JFR
Инструменты управления производительностью приложений
Практика: профилирование с JMC/JFR, SpringAOP, JMX Agent
08
Мониторинг и анализ данных кучи. Утечки памяти
Инструменты анализа памяти
Симптомы утечек памяти
Основные причины утечек памяти
Поиск и выявление утечек памяти
Мягкие, слабые и фантомн.ссылки
Анализа дампов кучи в IDEA
async-profiler для анализа памяти
JVisualVM и поиск утечек памяти
Анализ утечек памяти в JMC/JFR
Практика: выявление утечек через дамп кучи, JVisualVM, JMC/JFR
09
Итого на курс 40 часов: теория – 22 ч ( 55%), практика – 18 ч ( 45%)
Чему вы научитесь
01
Улучшать производительность приложений за счет мониторинга и настройки JVM.
02
Различать и правильно настраивать сборщики мусора под специфические сценарии.
03
Понимать, каким образом и через какие параметры JIT-компиляция влияет на производительность.
04
Работать с флагами JVM и прогнозировать их влияние на поведение приложения.
05
Проводить бенчмаркинг с использованием JMH и интерпретировать получаемые результаты.
06
Использовать эффективные структуры данных и работать с памятью вне кучи (off-heap).
07
Выявлять, анализировать и устранять узкие места производительности.
Курс проводят
Кузнецов Николай
Специалист в области Java-разработки
О тренере
Николай начал заниматься IT еще со школьных времен, с удовольствием разбирался в программировании и пытался писать свои сайты и модификации к играм. Обучаясь в университете, он понял, насколько на самом деле любит эту специальность. Николай был готов проводить все свободное время за изучением тонкостей программирования.
В какой-то момент желание изучать новое дополнилось еще одним желанием — делиться уже постигнутым. Тогда он осознал, что хочет преподавать. Но Николай не просто хотел быть преподавателем в вакууме; он хотел быть преподавателем, который реально работает с тем, чему учит. Так он пришел к решению совмещать практическую деятельность как программист-разработчик и преподаватель.
В конечном итоге так и случилось: теперь Николай имеет полное право показывать другим прекрасный мир IT, ведь он сам побывал на многих его перелесках и с честью может занять почетное место гида.
Проекты:
-
Архитектура 2.0 проекта «Столото» — переход от распределённого монолита к микросервисам по модели DDD.
-
База знаний Сбербанка Knowledge Assistant — разработка бэкенд-части системы взаимодействия операторов колл-центров с системой хранения знаний.
-
Печатный модуль для автоматизации печатных форм — разработка и поддержка.
-
Генератор новостных дайджестов для ООО «Медиа-Сервис» — разработка на PHP.
-
Разработка парсера для ООО «Медиа-Сервис» — разработка на PHP.
-
Серверная часть системы автоматизации документооборота групп для Учебно-курсового комбината «Мосгортранс» — разработка на yii2.
Сертификаты:
- 98-366:MTA: Networking Fundamentals
- 98-388:MTA: Introduction to Programming using Java CertiportId:90057035