Компиляция JVM - PullRequest
       2

Компиляция JVM

0 голосов
/ 28 августа 2018

Можно ли скомпилировать JVM для какого-то конкретного ISA?

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

Итак, JVM перекомпилируется для каждого нового ISA? Или у него есть особый способ сделать это и сохранить мобильность?

1 Ответ

0 голосов
/ 29 августа 2018

Существует более одной JVM, следовательно, нет простого ответа на вопросы о «JVM».

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

Но на практике JVM обеспечивают своевременную компиляцию в нативный код, а также функции, требующие взаимодействия с базовой архитектурой, помимо стандартных функций языка программирования, используемых для реализации (таких как C или C ++). Таким образом, для поддержки новой архитектуры недостаточно перекомпилировать исходный код JVM, необходимо также реализовать новый JIT-компилятор для нового ISA и обеспечить специализированную реализацию некоторых низкоуровневых компонентов. Это относится к широко используемой JVM HotSpot, которая является частью JDK и JRE, которые вы можете загрузить с веб-сайта Oracle . Вы можете заметить, что вам нужно выбрать правильную версию для вашей системы (если поддерживается).

Другой возможной стратегией является реализация JVM в самой Java. Чтобы иметь возможность запускать его на конкретной платформе, по крайней мере, некоторые его части должны быть заблаговременно скомпилированы с собственным кодом, для чего требуется подходящий AOT-компилятор. Если конкретный проект в любом случае включает компиляцию в собственный код (как часть JIT-компилятора), его использование для реализации AOT-компилятора не слишком надумано. Такой проект будет независим от поддержки платформы другого языка, но, конечно, он все еще требует реализации и поддержки конкретного кода для поддержки конкретной архитектуры. Это относится к субстрату JVM, части проекта GraalVM .

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