В настоящее время я работаю над проектом, который должен включать исследование техники JIT. Я полный новичок, когда дело касается компиляторов, но я провел небольшое исследование и узнал о виртуальной машине Java Hotspot. Я надеялся провести анализ преимуществ (или недостатков) использования Hotspot по сравнению с традиционными компиляторами (например, g ++).
Моя первоначальная идея заключалась в том, чтобы создать какую-то простую программу, которую можно было бы запустить через оба компилятора, чтобы сравнить время компиляции, но это вызвало ряд вопросов:
Двигаясь дальше, если два вышеуказанных пункта не являются проблемой, мои основные вопросы:
Как я могу на самом деле сравнить ускорение одного метода с другим?
Я провел небольшое исследование по этому поводу, но все, что я смог найти, это способы измерить эффективность самой программы, а не метод компиляции, использованный для ее запуска. Возможно ли то, что я пытаюсь сделать? Существуют ли методы для анализа скорости работы одного компилятора над другим?
Любая помощь приветствуется!
Что ж, решение, что сравнивать и как сравнивать, и какое сравнение имеет смысл, - это как раз часть работы, которую вы хотите выполнить.





How can I actually go about benchmarking the speed-up in one method versus the other?
Сначала вам нужно подумать о том, что вы на самом деле собираетесь измерить. Другими словами, выражение «ускорение» недостаточно строго.
Мы говорим о циклах процессора, затраченных на компиляцию? Или настенное время от исходного кода до работающей программы? Или пиковая производительность нескольких критических методов в микробенчмарке? Общая стабильная производительность программы? Скорость инициализации программы? ...
В конце концов, вы сравниваете две системы, которые пришли к совершенно разным компромиссам. Вы можете найти несколько примерно сопоставимых тестов, уже упомянутых в комментариях, но в конечном итоге они в основном представляют собой определенный тип задач, связанных с пропускной способностью, а не большие приложения. Не похоже, чтобы вы могли найти такое приложение, как firefox, написанное как на C, так и на Java, с идентичным набором функций и сопоставимым качеством кода. Таким образом, любое сравнение, которое вы сделаете, будет неполным, потому что вам придется использовать некоторые ограниченные прокси-измерения того, насколько сопоставимы две кодовые базы, когда вы их сравниваете.
Четыре ссылки, которые могут вас заинтересовать: benchmarksgame.alioth.debian.orggodbolt.orgopenjdk.java.net/projects/code-tools/jmhgithub.com/AdoptOpenJDK/jitwatch