Это, в первую очередь, вопрос вычислительной сложности. Сопоставление с образцом (точнее поиск frequent patterns) на строках (те самые последовательности машинных инструкций) и на DAG/графах — это разные вещи.
Вот есть оптимизации инлайнинга. А есть обратные оптимизации? Поиск одинаковых веток дерева, и вынесение их в функции.
Есть, но это значительно более дорогая операция, где то здесь выкладывали видео то ли 2015го, то ли 2017го года где предлагалось ускорить такую оптимизацию через pattern matching в суффиксном дереве постороенном из байткода / машинного кода
у меня даже несколько сложнее кейс. У меня стек, там просто по сути идет pop/push тех же инструкций. Сам байткод не умеет юзать ничего, кроме регистров, для хранения стейта. Так вот, тут получается не инлайн, а подобие.
Вот тут видно, что каждый раз берется объект, ложится в стек следущий поле, и присваивается в метод. И по новой. Инструкции похожи, но они параметрические получаются.
Это уже соптимизнуто, кастыльно. Я вызываю боксинг 1 раз, что уже быстрее, так как боксинг - это поиск по прототипу, что конечно не долго. Но это метод вызывается 4 раза в фрейм, и делает 12 раз боксинг. createActivation вообще алоцирует новый объект