Чему вы научитесь
- 1. Диагностика и методология
- 2. Управление памятью и сборка мусора (GC)
- 3. Анализ производительности кода (JIT и бенчмаркинг)
- 4. Работа с памятью вне кучи (Off-Heap)
- 5. Сериализация
- 6. Профилирование и поиск узких мест
- 7. Поиск и устранение утечек памяти
- 8. Кэширование
- 9. Уверенная работа с флагами JVM
- После курса слушатель сможет самостоятельно провести полный цикл оптимизации Java-приложения: от нагрузочного тестирования и профилирования до тонкой настройки GC, JIT и структур данных, включая устранение утечек и внедрение эффективного кэширования.
О курсе
Вы столкнулись с тем, что ваше Java-приложение тормозит под нагрузкой, потребляет подозрительно много памяти или нестабильно работает в продакшене? Стандартных настроек «из коробки» часто недостаточно, а непродуманное изменение флагов JVM только ухудшит ситуацию. Данный курс начинается с правильной методологии: вы изучите, что на самом деле означает термин «performance» с точки зрения теории массового обслуживания, видов нагрузочных тестов --- и даже в аспекте психологии восприятия! Мы разберем антипаттерны оптимизации и сформируем рекомендуемый пошаговый подход к тюнингу, а также освоим инструментарий нагрузочного тестирования (на примере JMeter). Это позволит вам не гадать, а системно выявлять узкие места.
Неотъемлемая часть курса посвящена сердцу JVM — сборщикам мусора и JIT-компиляции. Вы детально разберете все актуальные GC: от Serial и Parallel до современных Shenandoah, ZGC и даже экспериментального Epsilon. Научитесь выбирать оптимальный сборщик под конкретную задачу и использовать инструменты мониторинга (от jConsole и jstat до VisualVM и JMC). В результате вы получите готовый арсенал настроечных флагов JVM, алгоритм подбора GC и практические сценарии мониторинга.
Попутно мы раскроем тайны JIT-компиляции: встраивание методов, развертывание циклов, скалярную замену, спекулятивные оптимизации и прочую "алхимию". Вы узнаете, как многоуровневая компиляция и intrinsic-реализации ускоряют код, и сможете заглянуть в оптимизации через JIT Watch.
Половина курса — это реальная практика и промышленные инструменты. Вы освоите JMH для правильного бенчмаркинга, научитесь избегать типичных ошибок (напр., из-за Dead Code Elimination) и проектировать корректные микротесты. Мы перейдем к off-heap памяти через Unsafe и затем освоим современный Foreign Memory API, создавая эффективные структуры данных без нагрузки на GC. Отдельный блок — сериализация: вы сравните производительность Jackson, Protobuf, Kryo, FST и других форматов, наглядно увидите слабые места стандартной Java-сериализации. Далее вы овладеете профилированием с помощью async-profiler, JFR и AOP, научитесь находить блокировки и узкие места в реальном приложении.
Курс учит не только разгонять приложения, но и делать их стабильными в долгосрочной перспективе. Вы изучите все виды ссылок (Soft, Weak, Phantom) и освоите с добрый десяток приемов выявления утечек памяти. Обстоятельный раздел по кэшированию охватывает HTTP-кэши, кэш-провайдеры для Spring, особенности кэширование при работе с БД через Hibernate и даже принципы работы CPU/OS-кэшей.
Этот курс для разработчиков и архитекторов, которые хотят, чтобы их Java-приложения работали быстро, надежно и предсказуемо даже под экстремальной нагрузкой.
Для кого этот курс
Начальные требования
Обязательные требования (hard skills)
-
Уверенное знание синтаксиса Java 8+
-
Понимание ООП (классы, интерфейсы, наследование, полиморфизм)
-
Работа с коллекциями (List, Map, Set) и исключениями
-
Написание многопоточного кода (Thread, Runnable, synchronized)
-
-
Базовое понимание работы JVM
-
Что такое класслоадеры и как загружаются классы
-
Понятие «куча» (heap) и «стек» (stack)
-
Как запускается Java-приложение (java -jar, classpath)
-
-
Опыт коммерческой разработки или сильных пет-проектов на Spring
-
Минимум 1 год активного написания кода на Java
-
Альтернатива: уверенное выполнение учебных проектов уровня «продвинутый»
-
-
Навыки работы с командной строкой
-
Запуск JAR-файлов с параметрами (-Xmx, -XX:+PrintGCDetails)
-
Работа с переменными окружения (JAVA_HOME, PATH)
-
-
Базовые знания SQL и JDBC
-
Понимание, как приложение обращается к базе данных (будет нужно в модулях по профилированию и кэшированию)
-
Рекомендуемые (но не строгие) требования
-
Знакомство с HTTP и REST (для учебных модулей по кэшированию и профилированию веб-приложений)
-
Опыт работы с Maven (для сборки JMH-проектов и лабораторных работ в Spring)
-
Базовое понимание сборки мусора на уровне «как-то там удаляются ненужные объекты» (можно получить из бесплатных статей до курса)
Что НЕ требуется (этому научим)
-
Глубокое знание внутренностей JVM (байт-кода, структуры GC, JIT-компиляции)
-
Опыт работы с профилировщиками (async-profiler, JFR)
-
Знание off-heap памяти и Unsafe
-
Опыт написания бенчмарков (JMH)
Наши преподаватели
Как проходит обучение
Формат и содержание занятий
Обучение полностью построено на видеозаписях лекций и практических разборов, которые можно смотреть в удобном темпе. Каждый модуль начинается с теоретической лекции, где инструктор объясняет, к примеру, внутреннее устройство JVM, механизмы сборки мусора, JIT-компиляции или профилирования — с использованием слайдов, схем и live-демонстраций кода. Затем следуют видео с разбором готовых проектов и лабораторных работ: вы видите реальный код, его запуск, а также шаги по настройке флагов JVM, отладке и профилированию. Все примеры сопровождаются поясненями, что и почему именно мы делаем, а также демонстрацией работы инструментов промышленного класса (JMH, async-profiler, VisualVM, JMC и т.д.).
Самостоятельная практика
К каждому модулю прилагаются исходные коды проектов и лабораторные задания. Вы останавливаете видео, самостоятельно повторяете разобранные эксперименты (например, пишите микротесты, ищете утечку памяти и т.п.), а затем сверяете свой результат с готовым решением из видео. Такой подход позволяет не просто смотреть, а сразу применять знания.
Программа курса
Что вы получаете
- Вы — разработчик или инженер, который может взять любое тормозящее Java-приложение, измерить его профиль, настроить JVM, переписать критический код на off-heap или эффективную сериализацию, добавить кэширование --- и доказать ускорение через JMH-бенчмарки!