Статического анализа не всегда достаточно, чтобы компилятор мог выполнить все возможные оптимизации. Поэтому современные платформы используют Profile-Guided Optimization — сбор статистики выполнения, который помогает принимать более точные решения при оптимизации кода.
В докладе сравним, как PGO применяется в Go, .NET и Java — языках одной ниши, но с разными моделями компиляции. Разберём, какие оптимизации становятся возможны благодаря профилированию, как устроены tiered compilation и перекомпиляция, какие алгоритмы используются для сбора статистики.
На практических примерах посмотрим, какие возможности есть у каждого компилятора и как это влияет на итоговую производительность.