Анализ ускорения Oracle HotSpot по сравнению с другими методами компиляции

В настоящее время я работаю над проектом, который должен включать исследование техники JIT. Я полный новичок, когда дело касается компиляторов, но я провел небольшое исследование и узнал о виртуальной машине Java Hotspot. Я надеялся провести анализ преимуществ (или недостатков) использования Hotspot по сравнению с традиционными компиляторами (например, g ++).

Моя первоначальная идея заключалась в том, чтобы создать какую-то простую программу, которую можно было бы запустить через оба компилятора, чтобы сравнить время компиляции, но это вызвало ряд вопросов:

  • Насколько я понимаю, исходный код Java изначально преобразуется в байт-код компилятором javac (создавая файлы .class), а затем, в свою очередь, этот байт-код может быть запущен через HotSpot во время выполнения для выполнения программы. Учитывая это, было бы уместно сравнивать результаты с традиционным компилятором, который преобразует исходные коды напрямую в машинный код?
  • Еще одна проблема, с которой я столкнулся, заключается в том, что программы будут на разных языках (например, C++ или Java). Хотя функциональные возможности будут идентичными, может ли это привести к перекосу при попытке сравнения?

Двигаясь дальше, если два вышеуказанных пункта не являются проблемой, мои основные вопросы:

Как я могу на самом деле сравнить ускорение одного метода с другим?

Я провел небольшое исследование по этому поводу, но все, что я смог найти, это способы измерить эффективность самой программы, а не метод компиляции, использованный для ее запуска. Возможно ли то, что я пытаюсь сделать? Существуют ли методы для анализа скорости работы одного компилятора над другим?

Любая помощь приветствуется!

Четыре ссылки, которые могут вас заинтересовать: benchmarksgame.alioth.debian.orggodbolt.orgopenjdk.java.net/projects/code-tools/jmhgithub.com/AdoptOpenJDK/jitwatch

Kire Haglin 16.03.2018 08:42

Что ж, решение, что сравнивать и как сравнивать, и какое сравнение имеет смысл, - это как раз часть работы, которую вы хотите выполнить.

Holger 16.03.2018 10:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
45
1

Ответы 1

How can I actually go about benchmarking the speed-up in one method versus the other?

Сначала вам нужно подумать о том, что вы на самом деле собираетесь измерить. Другими словами, выражение «ускорение» недостаточно строго.

Мы говорим о циклах процессора, затраченных на компиляцию? Или настенное время от исходного кода до работающей программы? Или пиковая производительность нескольких критических методов в микробенчмарке? Общая стабильная производительность программы? Скорость инициализации программы? ...

В конце концов, вы сравниваете две системы, которые пришли к совершенно разным компромиссам. Вы можете найти несколько примерно сопоставимых тестов, уже упомянутых в комментариях, но в конечном итоге они в основном представляют собой определенный тип задач, связанных с пропускной способностью, а не большие приложения. Не похоже, чтобы вы могли найти такое приложение, как firefox, написанное как на C, так и на Java, с идентичным набором функций и сопоставимым качеством кода. Таким образом, любое сравнение, которое вы сделаете, будет неполным, потому что вам придется использовать некоторые ограниченные прокси-измерения того, насколько сопоставимы две кодовые базы, когда вы их сравниваете.

Другие вопросы по теме