JavaPerformance3

Форк из trv/JavaPerformance
0

Описание

Задание для самостоятельной работы

Языки

  • Java100%
readme.md

Задание на практическую работу по модулю Java Performance

Задание #1 (Object size)

  • Необходимо разработать универсальное решение для вычисления размера занимаемой памяти (shallow/deep) java-объектом;
  • Решение необходимо применить в утилите ObjectSizeUtil (модуль homework_1);
  • Модульные тесты ObjectSizeUtilTest для утилиты должны отработать успешно.

Задание #2 (Memory leak)

  • Необходимо проанализировать утилизацию ресурсов для приложения PartyParrot (модуль homework_2);
  • Приложение необходимо запускать с heap size <= 100Mb;
  • Если будет обнаружена утечка памяти, необходимо её устранить.

Задание #3 (Async-profiler)

  • Необходимо проанализировать утилизацию CPU для приложения PartyParrot с помощью async-profiler;
  • Для анализа необходимо получить снимки JFR с использованием Java API Async-profiler;
  • Формирование JFR должно происходить только в режиме профилирования (по умолчанию файл JFR не должен писаться при каждом вызове метода);
  • По результату анализа необходимо подтвердить или опровергнуть результат анализа и оптимизации из задания 2.

Задание #4 (JMH)

  • Необходимо написать benchmark для метода Recolor.recolor() с использованием JMH;
  • Замеры необходимо реализовать в новом модуле;
  • Необходимо предложить вариант оптимизации метода Recolor.recolor() (например реализовать через Stream API, использовать распараллеливание и т.д.);
  • Проанализировать результаты benchmark для старой и новых версий метода Recolor.recolor();
  • По результатам принять решение какой вариант метода самый производительный;
  • Все результаты тестов необходимо прикрепить к PR.

Как работать над заданием?

  • Создаёте от master свою новую ветку с типом release и с именем по шаблону "Фамилия_Модуль_Задание" (например: release/taranov_homework_1);
  • Клонируете проект из новой ветки в локальный репозиторий;
  • Делаете доработки у себя в локальном репозитории;
  • Заливаете свои доработки в новую feature ветку (например feature/taranov_homework_1);
  • Делаете PR в свою исходную релизную ветку (из которой клонировали проект).

Условие успешной сдачи работы (критерии приемки)

  • Проект компилируется и запускается;
  • Модульные тесты отрабатывают успешно;
  • Результат review PR = approve.