Компилятор Java JIT компилируется во время компиляции или во время выполнения? - PullRequest
2 голосов
/ 15 июня 2010

Из вики: В области компиляции оперативная компиляция (JIT), также известная как динамический перевод, представляет собой метод повышения производительности компьютерной программы во время выполнения.компилятор, а не javac, который только компилирует байт-код в машинный код во время выполнения, в то время как javac компилирует источники в байт-код.

Ответы [ 5 ]

3 голосов
/ 15 июня 2010

Это точно правильно.

  • javac компилирует .java исходный код в .class байт-код для JVM (Java Virtual Machine)
  • HotSpot во время выполнения идентифицирует, какая часть байт-кода заслуживает дальнейшей компиляции с инструкциями по производительности для работающей платформы

Смотри также


Еще больше компиляторов могут участвовать!

Обратите внимание, что другие языки, кроме Java, также могут присоединиться к веселью, имея собственные компиляторы, которые компилируются в байт-код JVM, а затем используют любую среду выполнения JVM для запуска. На HotSpot это также означает, что они получат JIT-компиляцию.

Смотри также

3 голосов
/ 15 июня 2010

Совершенно верно.

Suns JVM (и, как я полагаю, большинство других тоже) не сразу компилирует все файлы классов в машинный код, но некоторое время запускает приложение вдля определения горячих точек в коде, которые выиграют от компиляции (вместо интерпретации), и компилирует их «вовремя».

3 голосов
/ 15 июня 2010

Да, JIT работает во время выполнения.

Javac переводит исходный код Java в байт-код Java.В то время как JVM интерпретирует этот байт-код или компилирует его в собственный код.Но это не такой шаг, как перевод исходного кода, поскольку у JIT-компилятора нет пользовательского интерфейса.Кроме того, JIT работает только для горячих методов - самых вызываемых.

1 голос
/ 15 июня 2010

Этот двухэтапный процесс компиляции для получения машинного кода на самом деле также происходит с большинством статически скомпилированных языков, таких как C и C ++. Сначала они скомпилируют код во временный формат, такой как код 2-3, затем второй компилятор переведет это в машинный код. Цель этого разделения на фронтенд и бэкэнд компилятор состоит в том, чтобы упростить перенос компилятора на другую архитектуру компьютера или использование другого языка ввода. GCC является хорошим примером статического компилятора, который очень универсален благодаря этой архитектуре.

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

0 голосов
/ 15 июня 2010

Время компиляции - javac компилирует код Java в байт-код (.class файлы).

Время выполнения - JVM интерпретирует байт-код в машинный код,JIT - это оптимизация, которая позволяет быстрее выполнять байт-код, обнаруживая горячие точки (например, в JVM Sun) и предварительно компилируя код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...