Вам нужен инструмент, который может Профилировать распределение JVM .
Java Flight Recorder (JFR) может помочь вам с низким профилированием распределения накладных расходов ( 1 , 2 - документы для более старых версий, пользовательский интерфейс теперь выглядит совсем иначе, но "Распределения" и "TLAB" - все еще слова, используемые, чтобы найти материал). Убедитесь, что профилирование распределения включено в используемых вами настройках. Это коммерческая функция до OpenJDK 11. Говорят, что некоторые другие инструменты могут делать это с небольшими накладными расходами и в наши дни (например, async-profiler ).
Если вы не заботитесь о том, что ваше приложение становится необычайно медленным и работает на JDK <11 (?), VisualVM имел обыкновение показывать вам трассировки стеков распределений. Я не могу найти его в последней версии (1.4.2 на данный момент), но могу найти его в JVisualVM, поставляемом с моим Oracle JDK 8-что-то. «Профилировщик»> отметьте «Настройки»> «Настройки памяти»> отметьте «Запись трассировки стека выделения». Запустите профилирование, подождите, подождите, подождите, определите наибольшее распределение, щелкните правой кнопкой мыши «Сделать снимок и показать трассы стека распределения». Похоже, что YourKit делает в основном то же самое , что и JProfiler (они называют это «записью распределения»). Опять же: сильно замедляет работу приложения, поэтому не используйте его в prod.