Роман Елизаров — Почему GC съедает все моё CPU?

Что делать, если GC потребляет существенную долю ресурсов системы, но профилировщик CPU не показывает узких мест в приложении, а в снимке памяти активных объектов нет ничего необычного? Как такое может быть?

Ответ на вопрос, вынесенный в заголовок, очевиден – где-то в приложении выделяется очень много ненужных объектов, которые живут не долго и сразу уходят в мусор. Особенность заключается в том, что выделение памяти происходит очень быстро и не заметно в общей картине потребления CPU. В итоге, во время сборки мусора информация о виновнике, то есть, о том месте в коде, которое собственно выделило этот мусор, уже потеряна.

Как же найти эти места в большом приложении? Для решения этой задачи нами в Devexperts был создан специальный инструмент – AProf. Он позволяет учитывать каждое выделение памяти в коде Java-приложения и запоминать достаточно контекстных данных, чтобы, с одной стороны, можно было найти виновника, а, с другой, делать это на целевой, нагруженной платформе, без заметного её замедления.

Из доклада вы узнаете не только о том, как с помощью AProf найти все места в коде вашего приложения, которые создают избыточный мусор, но и о том, как AProf устроен.

  1. Роман Елизаров
    С 2017 года работает в JetBrains в команде Kotlin. Ранее занимался профессиональной разработкой программного обеспечения для биржевой и брокерской деятельности более 10 лет. Как координатор группы проектов в компании «Эксперт-Система» (известной на международном рынке как Devexperts) участвовал в разработке торговой платформы thinkorswim, признанной на рынке США платформой №1 несколько лет подряд уважаемым журналом Barron's. @relizarov