Сделал перевод доклада «Context-sensitive trace inlining for Java».
Прочитать можно здесь: русский | английский
По результатам доклада занятно то, что ни одна из статических оптимизаций не обогнала динамические. Одна приблизилась, но только для небольших размеров встроенного кода.
Авторы применили следующий хак: они запретили записывать и инлайнить трейсы глубже одного метода, и вместо этого цепочки строят в отдельной таблице связей. Это позволяет откладывать решение «инлайнить или нет» вплоть до этапа компиляции. На этапе компиляции данных больше, поэтому оптимизации получаются умнее. Плюс при этом натаскивается информация о контексте вызова.
Благодаря такому нехитрому способу они разгромили client compiler из HotSpot (времен Java8 b12) на основе которого и делали свою работу, а в некоторых тестах типа скорости запуска приложения приблизились даже к server compiler.