Одной из долгожданных фич вышедшего намедни 25-го релиза #Java для меня стал JEP-520 "JFR Method Timing & Tracing" — доработка Java Flight Recorder'а, которая позволяет профилировать приложения с помощью инструментирования, то есть считать точные количества вызовов методов и средние времена исполнения, да и вообще даёт более высокую точность по сравнению с сэмплингом 📐
Как бы в ответ на это Андрей Паньгин сегодня выпустил пост с ненавязчивым напоминанием о том, что в async-profiler возможность трейсить указанные Java-методы появилась ещё в 2020-ом году. И возможность замерять времена исполнения методов тоже есть, правда, подвезли её совсем недавно, поэтому доступна она пока только в ночных сборках 🌃
Заодно он прошёлся и по самому JEP-520: объяснил, чем принятый в async-profiler'е подход выгодно отличается от реализованного в JDK, и подсветил два бага (раз, два), которые сам же и обнаружил 🪲
Если опираться только на этот пост, может показаться, что async-profiler безоговорочно лучше JFR подходит для трассирующего профилирования. Но, как обычно, на деле всё не так однозначно. Например, JFR может оказаться предпочтительнее, когда:
— нельзя профилировать сторонними инструментами;
— нужно подключиться к процессу удалённо;
— профилируемые методы нельзя описать маской имени, но у них есть общие аннотации 📧
Словом, всему своё место. В любом случае здорово, что оба инструмента развивают схожий функционал, ведь это даёт нам — конечным пользователям — возможность выбрать из них наиболее подходящий для каждой конкретной задачи👷
Post #254
569