Содержание курса
Методология тюнинга и мониторинга
10 уроков
1.
Что такое 'performance'
↗
2.
Основные понятия
↗
3.
Психологические аспекты
↗
4.
Теория массового обслуживания
↗
5.
Виды тестовых метрик
↗
6.
Влияющие факторы
↗
7.
Виды тестов
↗
8.
Рекомендуемый подход
↗
9.
Антипаттерны оптимизации
↗
10.
Нагрузочный инструментарий
↗
Сборщики мусора
15 уроков
1.
Принципы управления памятью
↗
2.
Сборка мусора: фундаментальные концепции
↗
3.
Подход к настройке GC
↗
4.
Сборщик мусора Serial GC
↗
5.
Сборщик мусора Parallel / Throughput GC
↗
6.
Сборщик мусора CMS GC
↗
7.
Сборщик мусора G1 GC
↗
8.
Сборщик мусора Shenandoah GC
↗
9.
Сборщик мусора Epsilon GC
↗
10.
Сборщик мусора ZGC GC
↗
11.
Инструмент jConsole
↗
12.
Инструмент VisualVM
↗
13.
Инструмент Java Mission Control (JMC)
↗
14.
Инструмент jstat
↗
15.
Алгоритм подбора сборщика мусора: общие рекомендации
↗
JIT-компиляция в HotSpot JVM
15 уроков
1.
Компиляция и интерпретация
↗
2.
Подробнее про байт-код
↗
3.
Оптимизации фронтального компилятора
↗
4.
Самостоятельное упражнение: конкатенация
↗
5.
Что стоит за JIT-компиляцией
↗
6.
Многоуровневая компиляция
↗
7.
Инструмент JIT Watch
↗
8.
Встраивания
↗
9.
Анализ локальности и скалярная замена
↗
10.
Развертывание цикла
↗
11.
Внутреннии реализации
↗
12.
Спекулятивные оптимизации
↗
13.
Java AOT и Graal
↗
14.
Обобщение
↗
15.
Демо: кто быстрее?
↗
Настроечные флаги JVM
10 уроков
1.
Классификация флагов
↗
2.
Флаги общего назначения
↗
3.
Флаги, относящиеся к строкам
↗
4.
Флаги, относящиеся к JIT-компиляции
↗
5.
Флаги, относящиеся к сборке мусора
↗
6.
Флаги, относящиеся к точкам безопасного состояния
↗
7.
Флаги, относящиеся к OutOfMemoryError
↗
8.
Флаги, относящиеся к TLAB-буферам
↗
9.
Прочие настроечные флаги
↗
10.
Рекомендованный порядок настройки
↗
Бенчмаркинг с помощью JMH
18 уроков
1.
Что такое "бенчмарк"
↗
2.
Категории бенчмарков
↗
3.
Первое знакомство с JMH
↗
4.
Создание JMH-проекта
↗
5.
Комментарии к созданию JMH_проекта
↗
6.
Разбор лаб.практикума: задача 01 (Baseline)
↗
7.
Задачи 02 (Annotations) и 03 (BenchmarkModes)
↗
8.
Задачи 04 (MyBenchmark) и 05 (States)
↗
9.
Задача 06 (Forking)
↗
10.
Задача 07 (StateFixtures)
↗
11.
Задачи 08 (DeadCode) и 09 (Blackhole)
↗
12.
Задача 10 (ConsumeCPU)
↗
13.
Задача 11 (Params)
↗
14.
Задача 12 (OpsPerInvocation)
↗
15.
Задача 13 (ConstantFolding)
↗
16.
Задача 14 (BatchSize)
↗
17.
ДЗ: постановка задачи
↗
18.
Подведение итогов обсуждения JMH
↗
Нативная (Off-Heap) память и эффективные структуры данных
11 уроков
1.
Сравнение памяти on-heap и off-heap
↗
2.
Класс sun.misc.Unsafe, часть 1
↗
3.
ФАКУЛЬТАТИВНО: механизм SecurityManager
↗
4.
Класс sun.misc.Unsafe, часть 2
↗
5.
ФАКУЛЬТАТИВНО: механизм volatile
↗
6.
Класс sun.misc.Unsafe, часть 3
↗
7.
Практика: эффективные структуры данных, часть 1
↗
8.
Практика: эффективные структуры данных, часть 2
↗
9.
Foreign Function & Memory API, часть 1
↗
10.
ФАКУЛЬТАТИВНО: механизм выравнивания байтов
↗
11.
Foreign Function & Memory API, часть 2
↗
Сериализация
15 уроков
1.
Что такое "сериализация"
↗
2.
Требования к стандартной Java-сериализации
↗
3.
Ключевое слово transient
↗
4.
Хрупкость стандартной Java-сериализации
↗
5.
Метод readObject() с проверкой инварианта
↗
6.
GSON
↗
7.
Jackson
↗
8.
Protobuf
↗
9.
Jackson Smile
↗
10.
CBOR
↗
11.
Kryo
↗
12.
FST
↗
13.
One-NIO
↗
14.
Обзор лабораторного практикума
↗
15.
Сравнение бинарных (де)сериализаторов
↗
Профилирование приложений
12 уроков
1.
Введение в профилирование
↗
2.
Особенности сэмплирования
↗
3.
Идея асинхронного профилирования
↗
4.
JFR и APM (Application Performance Management)
↗
5.
Практикум: обзор вводных лабораторок
↗
6.
Практикум: знакомство с async-profiler
↗
7.
Практикум: профилировка приложения Small_&_Big
↗
8.
Практикум: профил-ка JDBC- и REST-событий с помощью Java Agent
↗
9.
Практикум: профилировка на базе AOP
↗
10.
Практикум: обзор факультативных лабораторок
↗
11.
Практикум: низкоуровневая синхронизация критических секций
↗
12.
Практикум: студенческие JFR-записи
↗
Анализ и мониторинг памяти
11 уроков
1.
OutOfMemoryError
↗
2.
Причины утечек памяти
↗
3.
SoftReference: теория
↗
4.
SoftReference: демонстрации
↗
5.
WeakReference
↗
6.
PhantomReference
↗
7.
Кэширование и внутреннее состояние
↗
8.
Принципы выявления утечек памяти
↗
9.
Демо: "подтекающий" HttpUnit
↗
10.
Практика: проект memory-leak
↗
11.
Практика: KeylessEntry
↗
Кэширование
9 уроков
1.
Принципы кэширования
↗
2.
HTTP-кэширование
↗
3.
Практика: HTTP-кэширование
↗
4.
Кэширование результатов вычислений
↗
5.
Практика: кэширование в Spring
↗
6.
Кэширование при обращении в БД
↗
7.
Практика: проект Hibernate-cache
↗
8.
Кэширование в ЦП, ОЗУ, I/O
↗
9.
Буферизация I/O, мониторинг кэширования
↗
Основы статистического анализа метрик
6 уроков
1.
Категории ошибок
↗
2.
Интерпретация собранных данных
↗
3.
Устойчивые метрики
↗
4.
Резервуарная выборка
↗
5.
Категории статистик
↗
6.
Приложение: Доверительный интервал и его оценка
↗