Существует множество разных способов профилирования Java-кода и профилировщиков, которые позволяют это делать. Недавно нам понадобилось собирать профиль приложений, запускаемых на Excelsior JET. При этом делать это нужно было на всех поддерживаемых системах и архитектурах, без перекомпиляции приложения, да еще и с приемлемой производительностью. Оказалось, что привычные способы профилирования одновременно под все эти пункты не подходят, поэтому нужно было придумать что-то свое.
В докладе расскажем:
- зачем JVM с AOT понадобился встроенный профайлер;
- какие вообще есть способы профилирования Java-кода и подходят ли они для случая AOT-компиляции;
- что можно себе позволить, если профилировать код изнутри JVM;
- чем пришлось заплатить за универсальность получившегося профилировщика.