Почему JIT-компилятор (Java) не сохраняет результаты? - PullRequest
0 голосов
/ 03 января 2019

Как я узнал о JIT-компиляторе отсюда: Что делает компилятор JIT-ов? и

нет * .exe или *.DLL, сгенерированная Java JIT для Windows.Он записывает инструкции процессора в память (RAM) и запускает его оттуда.Нет необходимости создавать отдельный PE-файл с заголовками и всем остальным

Мой вопрос: ПОЧЕМУ не компилятор JIT (Java) не сохраняет результаты?Разве не полезно хранить скомпилированный код, чтобы сэкономить время для следующего запуска?

(Мой вопрос отличается от упомянутого выше, потому что я подчеркнул на WHY )

1 Ответ

0 голосов
/ 03 января 2019

Выход JIT может отличаться для каждого прогона - он может оптимизироваться для текущей схемы загрузки.Это иногда позволяет оптимизировать его более агрессивно, чем это было бы возможно для предварительно скомпилированного кода, который необходимо повторно использовать.

Если шаблон загрузки изменяется и оптимизация оказывается неоптимальной или даже неблагоприятной,JIT может де-оптимизировать и, возможно, попробовать другую оптимизацию

(см. также О динамической де-оптимизации HotSpot )

Теперь это может иногда снижать производительностьчтобы сохранить результаты различных скомпилированных версий и использовать их позже, но это также потребовало бы значительного объема бухгалтерского учета, чтобы выяснить, был ли раздел кода уже скомпилирован с актуальными на данный момент оптимизациями.

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

...