Я начал интересоваться, как работает виртуальная машина Java.
На данный момент я знаю, что исходный код java компилятором преобразуется в байткод. Соответственно этот байткод — это и есть инструкции для виртуального процессора виртуальной машины. Сама jvm зависит от платформы, на которой она используется.
Но вот теперь вопрос, раз сама JVM — платформа, имеющая свой ненастоящий процессор который понимает инструкции (байткод), то где в этой цепочке программа преобразуется в машинный код, который уже будет исполнять реальный процессор компьютера? JVM же когда-то должна сгенерировать машинной код, который зависит от какой либо операционной системы?
Код, который обходит JVM-байткод и выполняет соответствующие системные команды без предварительной их компиляции это код самой JVM на каком-то языке, который компилируется соответствующим компилятором напрямую в машинный код (скажем, JVM проекта OpenJDK написана на C++).
Можно условно представить, что для каждого вида команды в JVM-байткоде есть фрагментик машинного кода в самой JVM, выполнение которого даёт требуемый этой командой эффект.
Но это если не учитывать JIT. Который целые последовательности команд (а не отдельные команды) преобразует в соответствующий машинный код, но уже в процессе работы. Но там-то понятно, откуда машинный код берётся.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости