Чем отличается совместимость JVM с архитектурой CPU от компилятора для архитектуры CPU?

В моем стремлении понять причину использования Java поверх C++ или наоборот для написания приложений я застрял на этом одном моменте. Я посмотрел видео, знакомящее меня с Java, и они сказали, что причина существования JVM в том, что он делает Java переносимым, то есть он работает на многих архитектурах, таких как телефоны и прочее, без необходимости написания нового компилятора для каждой отдельной комбинации ОС процессора. Но люди должны что-то делать, чтобы сделать это совместимым с каждым процессором и ОС. Я не вижу, как использование JVM что-то меняет.

1 ответ

Первоначальные (БЕТА) версии Java были выведены за то, что они "пишите один раз, тестируйте везде". Улучшение качества программного обеспечения на начальных платформах (SunOS/Solaris, Windows, Mac и т. Д.) Значительно увеличило его переносимость (и переносимое программное обеспечение по своей природе легче переносить). В настоящее время существует несколько реализаций Java (IBM, JRockit и т. Д.).

По сути, Java - это спецификация виртуальной машины, которая выполняет байт-коды; а не какая-то конкретная реализация. Поскольку байт-код одинаков для всех платформ, компилятор Java не нужно изменять для поддержки новых платформ. Кроме того, большая часть OpenJDK (и, следовательно, Oracle JVM) написана на Java. По сути, начальная загрузка Java упрощена по сравнению с начальной загрузкой компилятора для "реальной" архитектуры процессора1.

1За исключением процессоров, которые по своей природе выполняют байт-код Java.

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