Курс «Java Advanced II: высокопроизводительная Java»

Направление
Java-разработка
Формат
Вебинар
Домашние задания
Есть
Итоговый экзамен
Нет
Количество уроков
10
Документ об обучении
Сертификат
Обратная связь
Есть
Доступ
Сразу после покупки
Последнее обновление 16.08.2022

О курсе

Курс посвящен повышению производительности Java-приложений: выявлению узких мест, подходам и методам для повышению производительности, а также инструментам и библиотекам, позволяющим добиться высокой производительности.

Программа курса

  1. Общие практики;
    Стратегии тюнинга производительности;
    Метрики производительности;
    Как повысить производительность?
    Инструменты для измерения производительности;
    JMeter;
    Нагрузочное тестирование с помощью JMeter;
    Как повысить производительность с помощью архитектуры?
    Повышение производительности с помощью архитектуры: потоки, очереди, микросервисы, облака;
    Лучшие практики для улучшения производительности кода.
  2. Использование памяти Java-объектами;
    Общие подходы и алгоритмы сборщиков мусора;
    Сборщик мусора Serial GC;
    Сборщик мусора Parallel GC;
    Сборщик мусора CMS;
    Сборщик мусора G1;
    Сборщик мусора Shenandoah;
    Тюнинг сборщиков мусора;
    Инструменты сбора и анализа метрик о сборке мусора;
    Выбор оптимального сборщика мусора.
  3. JIT компиляция;
    Java байт-код;
    Многослойная компиляция;
    Кэш кода и его тюнинг;
    Оптимизация кода;
    Деоптимизация кода и когда она происходит;
    Инструмент JITWatch для анализа результатов компиляции;
    Виды оптимизаций;
    Спекулятивные оптимизации;
    Настройка компилятора;
    AOT компиляция;
    GraalVM.
  4. Назначение и категории флагов JVM;
    Общие флаги;
    Флаги, связанные со строками;
    Флаги управления памятью;
    Safepoints и флаги, связанные с ними;
    TLAB и флаги, связанные с ними;
    План тюнинга JVM.
  5. Модуль 5. Тестирование производительности алгоритмов (benchmarking) с помощью JMH (практика — 2 ч.)
  6. Что такое sun.misc.Unsafe;
    Методы Unsafe;
    Производительность нативной памяти;
    Создание структур данных в нативной памяти;
    Оценка производительности нативной памяти и сравнение с памятью в куче;
    Примитивные коллекции;
    Денормализация данных;
    Перспективный Foreign Memory Access API.
  7. Сериализаторы JSON (GSON, Jackson);
    Двоичные сериализаторы (Protobuf, Jackson Smile, Kryo, FST, One NIO);
    Сравнение производительности различных сериализаторов;
    Производительность сети при подключении через различные протоколы: HTTP/REST, TCP, Async TCP, RSocket, Netty server/client.
  8. Когда и как делать профилирование?
    Сэмплирующие и инструментирующие профайлеры;
    Использование 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;
    Средства управления производительностью приложений;
    Использование Glowroot для профилирования и анализа SQL-запросов и REST-запросов.
  9. Инструменты для анализа динамической памяти;
    Признаки утечек памяти;
    Основные причины утечек памяти;
    Поиск и обнаружение утечек памяти;
    Слабые и фантомные ссылки;
    Инструменты IDEA для анализа дампов кучи;
    Асинхронный профайлер для анализа потребления памяти;
    Использование числа генераций профайлера VisualVM для обнаружения утечек памяти;
    Использование MissionControl/JFR для автоматического анализа утечек памяти;
    Анализатор памяти Eclipse — анализ знаменателей и кучи.
  10. Шаблоны кеширования;
    Кеширование HTTP запросов;
    Конфигурация библиотек кеширования;
    Популярные библиотеки кэширования: EhCache, Caffeine;
    Кеширование сервисного уровня;
    Кеширование Spring сервисов;
    Буферизация ввода/вывода;
    Кэш процессора и непрерывная область памяти;
    Кэширование JPA/Hibernate;
    Приложения, использующие кэши разных уровней.